function aggregator_refresh
aggregator_refresh($feed)
Checks a news feed for new items.
Parameters
$feed: An object describing the feed to be refreshed.
File
- modules/aggregator/aggregator.module, line 612
- Used to aggregate syndicated content (RSS, RDF, and Atom).
Code
function aggregator_refresh($feed) { // Store feed URL to track changes. $feed_url = $feed->url; // Fetch the feed. list($fetcher, $parser, $processors) = _aggregator_get_variables(); $success = module_invoke($fetcher, 'aggregator_fetch', $feed); // We store the hash of feed data in the database. When refreshing a // feed we compare stored hash and new hash calculated from downloaded // data. If both are equal we say that feed is not updated. $hash = hash('sha256', $feed->source_string); if ($success && ($feed->hash != $hash)) { // Parse the feed. if (module_invoke($parser, 'aggregator_parse', $feed)) { // Update feed with parsed data. db_merge('aggregator_feed') ->key(array('fid' => $feed->fid)) ->fields(array( 'url' => $feed->url, 'link' => empty($feed->link) ? $feed->url : $feed->link, 'description' => empty($feed->description) ? '' : $feed->description, 'image' => empty($feed->image) ? '' : $feed->image, 'hash' => $hash, 'etag' => empty($feed->etag) ? '' : $feed->etag, 'modified' => empty($feed->modified) ? 0 : $feed->modified, )) ->execute(); // Log if feed URL has changed. if ($feed->url != $feed_url) { watchdog('aggregator', 'Updated URL for feed %title to %url.', array('%title' => $feed->title, '%url' => $feed->url)); } watchdog('aggregator', 'There is new syndicated content from %site.', array('%site' => $feed->title)); drupal_set_message(t('There is new syndicated content from %site.', array('%site' => $feed->title))); // If there are items on the feed, let all enabled processors do their work on it. if (@count($feed->items)) { foreach ($processors as $processor) { module_invoke($processor, 'aggregator_process', $feed); } } } } else { drupal_set_message(t('There is no new syndicated content from %site.', array('%site' => $feed->title))); } // Regardless of successful or not, indicate that this feed has been checked. db_update('aggregator_feed') ->fields(array('checked' => REQUEST_TIME, 'queued' => 0)) ->condition('fid', $feed->fid) ->execute(); // Expire old feed items. if (function_exists('aggregator_expire')) { aggregator_expire($feed); } }
© 2001–2016 by the original authors
Licensed under the GNU General Public License, version 2 and later.
Drupal is a registered trademark of Dries Buytaert.
https://api.drupal.org/api/drupal/modules!aggregator!aggregator.module/function/aggregator_refresh/7.x