'OK. FeedWordPress had no problems retrieving the content at this URL but the content does not seem to be a feed, and does not seem to include links to any feeds.', 201 => 'Created', 202 => 'Accepted', 203 => 'Non-Authoritative information', 204 => 'No Content', 205 => 'Reset Content', 206 => 'Partial Content', 300 => 'Multiple Choices', 301 => 'Moved Permanently', 302 => 'Found', 303 => 'See Other', 304 => 'Not Modified', 305 => 'Use Proxy', 307 => 'Temporary Redirect', 400 => 'Bad Request', 401 => 'Unauthorized. This URL probably needs a username and password for you to access it.', 402 => 'Payment Required', 403 => 'Forbidden. The URL is not made available for the machine that FeedWordPress is running on.', 404 => 'Not Found. There is nothing at this URL. Have you checked the address for typos?', 405 => 'Method Not Allowed', 406 => 'Not Acceptable', 407 => 'Proxy Authentication Required', 408 => 'Request Timeout', 409 => 'Conflict', 410 => 'Gone. This URL is no longer available on this server and no forwarding address is known.', 411 => 'Length Required', 412 => 'Precondition Failed', 413 => 'Request Entity Too Large', 414 => 'Request URI Too Long', 415 => 'Unsupported Media Type', 416 => 'Requested Range Not Satisfiable', 417 => 'Expectation Failed', 500 => 'Internal Server Error. Something unexpected went wrong with the configuration of the server that hosts this URL. You might try again later to see if this issue has been resolved.', 501 => 'Not Implemented', 502 => 'Bad Gateway', 503 => 'Service Unavailable. The server is currently unable to handle the request due to a temporary overloading or maintenance of the server that hosts this URL. This is probably a temporary condition and you should try again later to see if the issue has been resolved.', 504 => 'Gateway Timeout', 505 => 'HTTP Version Not Supported', ); var $updatedPosts = NULL; var $special_settings = array ( /* Regular expression syntax is OK here */ 'cats', 'cat_split', 'fetch timeout', 'freeze updates', 'hardcode name', 'hardcode url', 'hardcode description', 'hardcode categories', /* Deprecated */ 'comment status', 'terms', 'map authors', 'munge permalink', 'ping status', 'post status', 'postmeta', 'query parameters', 'resolve relative', 'syndicated post type', 'tags', 'unfamiliar author', 'unfamliar categories', /* Deprecated */ 'unfamiliar category', 'unfamiliar post_tag', 'add/.*', 'update/.*', 'feed/.*', 'link/.*', 'match/.*', ); /** * Constructs the Feeds page object * * @param mixed $link An object of class {@link SyndicatedLink} if created for one feed's settings, NULL if created for global default settings */ function FeedWordPressFeedsPage ($link = -1) { if (is_numeric($link) and -1 == $link) : $link = FeedWordPressAdminPage::submitted_link(); endif; FeedWordPressAdminPage::FeedWordPressAdminPage('feedwordpressfeeds', $link); $this->dispatch = 'feedwordpress_admin_page_feeds'; $this->pagenames = array( 'default' => 'Feeds', 'settings-update' => 'Syndicated feed', 'open-sheet' => 'Feed and Update', ); $this->filename = __FILE__; $this->updatedPosts = new UpdatedPostsControl($this); $this->special_settings = apply_filters('syndicated_feed_special_settings', $this->special_settings, $this); } /* FeedWordPressFeedsPage constructor */ function display () { global $fwp_post; global $post_source; $this->boxes_by_methods = array( 'feed_information_box' => __('Feed Information'), 'global_feeds_box' => __('Update Scheduling'), 'updated_posts_box' => __('Updated Posts'), 'custom_settings_box' => __('Custom Feed Settings (for use in templates)'), 'fetch_settings_box' => __('Settings for Fetching Feeds (Advanced)'), ); if ($this->for_default_settings()) : unset($this->boxes_by_methods['custom_settings_box']); endif; // Allow overriding of normal source for FeedFinder, which may // be called from multiple points. if (isset($post_source) and !is_null($post_source)) : $source = $post_source; else : $source = $this->dispatch; endif; if (isset($_REQUEST['feedfinder']) or (isset($_REQUEST['action']) and $_REQUEST['action']=='feedfinder') or (isset($_REQUEST['action']) and $_REQUEST['action']==FWP_SYNDICATE_NEW)) : // If this is a POST, validate source and user credentials FeedWordPressCompatibility::validate_http_request(/*action=*/ $source, /*capability=*/ 'manage_links'); return $this->display_feedfinder(); // re-route to Feed Finder page endif; parent::display(); return false; // Don't continue } /* FeedWordPressFeedsPage::display() */ function ajax_interface_js () { FeedWordPressAdminPage::ajax_interface_js(); ?> jQuery(document).ready( function () { contextual_appearance('automatic-updates-selector', 'cron-job-explanation', null, 'no'); contextual_appearance('time-limit', 'time-limit-box', null, 'yes'); contextual_appearance('use-default-update-window-no', 'update-scheduling-note', null, null, 'block', true); jQuery('#use-default-update-window-yes, #use-default-update-window-no').click( function () { contextual_appearance('use-default-update-window-no', 'update-scheduling-note', null, null, 'block', true); } ); var els = ['name', 'description', 'url']; for (var i = 0; i < els.length; i++) { contextual_appearance( /*item=*/ 'basics-hardcode-'+els[i], /*appear=*/ 'basics-'+els[i]+'-view', /*disappear=*/ 'basics-'+els[i]+'-edit', /*value=*/ 'no', /*visibleStyle=*/ 'block', /*checkbox=*/ true ); } /* for */ } ); updatedPosts->display(); ?>
for_default_settings()) : ?> for_default_settings()) : ?>
Updates:

If you want to use a cron job, you can perform scheduled updates by sending regularly-scheduled requests to ?update_feedwordpress=1 For example, inserting the following line in your crontab:

*/10 * * * * /usr/bin/curl --silent ?update_feedwordpress=1

will check in every 10 minutes and check for updates on any feeds that are ready to be polled for updates.

: link->settings['update/last'])) : echo fwp_time_elapsed($page->link->settings['update/last'])." "; else : echo " none yet"; endif; ?>
: link->settings['update/hold']) ? $page->link->settings['update/hold'] : 'scheduled'); ?>

How long should FeedWordPress wait between updates before it considers this feed ready to be polled for updates again?

setting_radio_control( 'update/window', 'update_window', array(&$this, 'update_window_edit_box'), array( 'global-setting-default' => DEFAULT_UPDATE_PERIOD, 'default-input-name' => 'use_default_update_window', 'default-input-id' => 'use-default-update-window-yes', 'default-input-id-no' => 'use-default-update-window-no', 'labels' => array(&$this, 'update_window_currently'), ) ); ?>
:

Wait minutes between polling.

style="color: white; background-color: #703030; padding: 1.0em;">Recommendation. Unless you are positive that you have the webmaster's permission, you generally should not set FeedWordPress to poll feeds more frequently than once every 60 minutes. Many webmasters consider more frequent automated polling to be abusive, and may complain to your web host, or ban your IP address, as retaliation for hammering their servers too hard.

Note. This is a default setting that FeedWordPress uses to schedule updates when the feed does not provide any scheduling requests. If this feed does provide update scheduling information (through elements such as <rss:ttl> or <sy:updateFrequency>), FeedWordPress will respect the feed's request.

setting('fetch timeout', FEEDWORDPRESS_FETCH_TIMEOUT_DEFAULT)); if ($this->for_feed_settings()) : $article = 'this'; else : $article = 'a'; endif; ?>

Wait no more than than second(s) when trying to fetch feed to check for updates.

If source's web server does not respond before time runs out, FeedWordPress will skip over the source and try again during the next update cycle.

setting_radio_control( 'fetch timeout', 'fetch_timeout', array(&$this, 'fetch_timeout_setting'), array( 'global-setting-default' => FEEDWORDPRESS_FETCH_TIMEOUT_DEFAULT, 'input-name' => 'fetch_timeout', 'default-input-name' => 'fetch_timeout_default', 'labels' => array(&$this, 'fetch_timeout_setting_value'), ) ); } /* FeedWordPressFeedsPage::fetch_settings_box () */ function feed_information_box ($page, $box = NULL) { global $wpdb; $link_rss_params = maybe_unserialize($page->setting('query parameters', '')); if (!is_array($link_rss_params)) : $link_rss_params = array(); endif; if ($page->for_feed_settings()) : $info['name'] = esc_html($page->link->link->link_name); $info['description'] = esc_html($page->link->link->link_description); $info['url'] = esc_html($page->link->link->link_url); $rss_url = $page->link->link->link_rss; $hardcode['name'] = $page->link->hardcode('name'); $hardcode['description'] = $page->link->hardcode('description'); $hardcode['url'] = $page->link->hardcode('url'); else : $cat_id = FeedWordPress::link_category_id(); $params = array(); if (FeedWordPressCompatibility::test_version(FWP_SCHEMA_USES_ARGS_TAXONOMY)) : $params['taxonomy'] = 'link_category'; else : $params['type'] = 'link'; endif; $params['hide_empty'] = false; $results = get_categories($params); // Guarantee that the Contributors category will be in the drop-down chooser, even if it is empty. $found_link_category_id = false; foreach ($results as $row) : // Normalize case if (!isset($row->cat_id)) : $row->cat_id = $row->cat_ID; endif; if ($row->cat_id == $cat_id) : $found_link_category_id = true; endif; endforeach; if (!$found_link_category_id) : $results[] = get_category($cat_id); endif; $info = array(); $rss_url = null; $hardcode['name'] = get_option('feedwordpress_hardcode_name'); $hardcode['description'] = get_option('feedwordpress_hardcode_description'); $hardcode['url'] = get_option('feedwordpress_hardcode_url'); endif; // Hey ho, let's go ?> for_feed_settings()) : ?> __('Link Name'), "description" => __('Short Description'), "url" => __('Homepage'), ); foreach ($rows as $what => $label) : ?>
(validate) $pair) : ?>
Syndicated Link category:

FeedWordPress will syndicate the links placed under this link category.

Link Names:
Short descriptions:
Homepages:

These custom settings are special fields for the feed you are syndicating, to be retrieved in templates using the get_feed_meta() function. They do not create custom fields on syndicated posts. If you want to create custom fields that are applied to each individual post from this feed, set up the settings in Syndicated Posts.

link->settings as $key => $value) : if (!preg_match("\007^((".implode(')|(', $page->special_settings)."))$\007i", $key)) : ?>
Key Value Action
add new setting...
for_feed_settings()) : // Existing feed? $feedSwitch = true; if (is_null($lookup)) : // Switch Feed without a specific feed yet suggested // Go to the human-readable homepage to look for // auto-detection links $lookup = $this->link->link->link_url; // Guarantee that you at least have the option to // stick with what works. $current = $this->link->link->link_rss; $feeds[] = $current; endif; $name = esc_html($this->link->link->link_name); else: // Or a new subscription to add? $name = "Subscribe to ".esc_html(feedwordpress_display_url($lookup)).""; endif; ?>

Feed Finder:

display_alt_feed_box($lookup); endif; $finder = array(); if (!is_null($current)) : $finder[$current] = new FeedFinder($current); endif; $finder[$lookup] = new FeedFinder($lookup); foreach ($finder as $url => $ff) : $feeds = array_merge($feeds, $ff->find()); endforeach; $feeds = array_values( // Renumber from 0..(N-1) array_unique( // Eliminate duplicates $feeds ) ); if (count($feeds) > 0): if ($feedSwitch) : ?>

Feeds Found

1) : $option_template = 'Option %d: '; $form_class = ' class="multi"'; ?>

This web page provides at least different feeds. These feeds may provide the same information in different formats, or may track different items. (You can check the Feed Information and the Sample Item for each feed to get an idea of what the feed provides.) Please select the feed that you'd like to subscribe to.

$f): $pie = FeedWordPress::fetch($f); $rss = (is_wp_error($pie) ? $pie : new MagpieFromSimplePie($pie)); if ($rss and !is_wp_error($rss)): $feed_link = (isset($rss->channel['link'])?$rss->channel['link']:''); $feed_title = (isset($rss->channel['title'])?$rss->channel['title']:$feed_link); $feed_type = ($rss->feed_type ? $rss->feed_type : 'Unknown'); $feed_version_template = '%.1f'; $feed_version = $rss->feed_version; else : // Give us some sucky defaults $feed_title = feedwordpress_display_url($lookup); $feed_link = $lookup; $feed_type = 'Unknown'; $feed_version_template = ''; $feed_version = ''; endif; ?> action="admin.php?page=/syndication.php" method="post">
"> feed stamp_link_id(); // No feed specified = add new feed; we // need to pass along a starting title // and homepage URL for the new Link. if (!$this->for_feed_settings()): ?>
items) > 0): // Prepare to display Sample Item $link = new MagpieMockLink(array('simplepie' => $pie, 'magpie' => $rss), $f); $post = new SyndicatedPost(array('simplepie' => $rss->originals[0], 'magpie' => $rss->items[0]), $link); ?>

Sample Item

post['post_content']; ?>
'; print "

Problem:

\n"; print "

FeedWordPress encountered the following error when trying to retrieve this feed:

"; print '

'.$rss->get_error_message().'

'; print "

If you think this is a temporary problem, you can still force FeedWordPress to add the subscription. FeedWordPress will not be able to find any syndicated posts until this problem is resolved.

"; print "
"; endif; ?>

No Items

FeedWordPress found no posts on this feed.

Feed Information

  • Homepage: Unknown':$feed_title; ?>
  • Feed URL: (validate)
  • Encoding: encoding)?esc_html($rss->encoding):"Unknown"; ?>
  • Description: channel['description'])?esc_html($rss->channel['description']):"Unknown"; ?>
for_feed_settings()); ?>
$ff) : $url = esc_html($url); print "

Searched for feeds at ${url}

\n"; print "

".__('Error').": ".__("FeedWordPress couldn't find any feeds at").' '.htmlspecialchars($lookup).''; print ". ".__('Try another URL').".

"; // Diagnostics print "
\n"; print "

".__('Diagnostic information')."

\n"; if (!is_null($ff->error()) and strlen($ff->error()) > 0) : print "

".__('HTTP request failure')."

\n"; print "

".$ff->error()."

\n"; else : print "

".__('HTTP request completed')."

\n"; print "

Status ".$ff->status().": ".$this->HTTPStatusMessages[(int) $ff->status()]."

\n"; endif; // Do some more diagnostics if the API for it is available. if (function_exists('_wp_http_get_object')) : $httpObject = _wp_http_get_object(); $transports = $httpObject->_getTransport(); print "

".__('HTTP Transports available').":

\n"; print "
    \n"; print "
  1. ".implode("
  2. \n
  3. ", array_map('get_class', $transports))."
  4. \n"; print "
\n"; print "
\n"; endif; endforeach; endif; if (!$feedSwitch) : $this->display_alt_feed_box($lookup, /*alt=*/ true); endif; ?>
dispatch); ?>
style="margin: 1.0em 3.0em; font-size: smaller;"> Alternative feedsFind feeds

Use a different feed

stamp_link_id('link_id'); ?>

This can be the address of a feed, or of a website. FeedWordPress will try to automatically detect any feeds associated with a website.

for_feed_settings()) : if (isset($post['link_rss_params_key'])) : $qp = array(); foreach ($post['link_rss_params_key'] as $index => $key) : if (strlen($key) > 0) : if (isset($post['link_rss_params_value'][$index]) and strlen($post['link_rss_params_value'][$index])) : $value = $post['link_rss_params_value'][$index]; $qp[] = array($key, $value); endif; endif; endforeach; $this->update_setting('query parameters', serialize($qp)); endif; // custom feed settings first foreach ($post['notes'] as $mn) : $mn['key0'] = (isset($mn['key0']) ? trim($mn['key0']) : NULL); $mn['key1'] = trim($mn['key1']); if (preg_match("\007^((" .implode(')|(',$this->special_settings) ."))$\007i", $mn['key1'])) : $mn['key1'] = 'user/'.$mn['key1']; endif; if (strlen($mn['key0']) > 0) : unset($this->link->settings[$mn['key0']]); // out with the old endif; if (($mn['action']=='update') and (strlen($mn['key1']) > 0)) : $this->link->settings[$mn['key1']] = $mn['value']; // in with the new endif; endforeach; // now stuff through the web form // hardcoded feed info foreach (array('name', 'description', 'url') as $what) : // We have a checkbox for "No," so if it's unchecked, mark as "Yes." $this->link->settings["hardcode {$what}"] = (isset($post["hardcode_{$what}"]) ? $post["hardcode_{$what}"] : 'yes'); if (FeedWordPress::affirmative($this->link->settings, "hardcode {$what}")) : $this->link->link->{'link_'.$what} = $post['link'.$what]; endif; endforeach; // Update scheduling if (isset($post['update_schedule'])) : $this->link->settings['update/hold'] = $post['update_schedule']; endif; if (isset($post['use_default_update_window']) and strtolower($post['use_default_update_window'])=='yes') : unset($this->link->settings['update/window']); elseif (isset($post['update_window'])): if ((int) $post['update_window'] > 0) : $this->link->settings['update/window'] = (int) $post['update_window']; endif; endif; else : // Global update_option('feedwordpress_cat_id', $post['syndication_category']); if (!isset($post['automatic_updates']) or !in_array($post['automatic_updates'], array('init', 'shutdown'))) : $automatic_updates = false; else : $automatic_updates = $post['automatic_updates']; endif; update_option('feedwordpress_automatic_updates', $automatic_updates); if (isset($post['update_window'])): if ((int) $post['update_window'] > 0) : update_option('feedwordpress_update_window', (int) $post['update_window']); endif; endif; update_option('feedwordpress_update_time_limit', ($post['update_time_limit']=='yes')?(int) $post['time_limit_seconds']:0); foreach (array('name', 'description', 'url') as $what) : // We have a checkbox for "No," so if it's unchecked, mark as "Yes." $hardcode = (isset($post["hardcode_{$what}"]) ? $post["hardcode_{$what}"] : 'yes'); update_option("feedwordpress_hardcode_{$what}", $hardcode); endforeach; endif; if (isset($post['fetch_timeout'])) : if (isset($post['fetch_timeout_default']) and $post['fetch_timeout_default']=='yes') : $timeout = NULL; else : $timeout = $post['fetch_timeout']; endif; if (is_int($timeout)) : $timeout = intval($timeout); endif; $this->update_setting('fetch timeout', $timeout); endif; $this->updatedPosts->accept_POST($post); parent::save_settings($post); } /* FeedWordPressFeedsPage::save_settings() */ } /* class FeedWordPressFeedsPage */ $feedsPage = new FeedWordPressFeedsPage; $feedsPage->display();