cms/drupal/modules/aggregator/aggregator.fetcher.inc
changeset 541 e756a8c72c3d
equal deleted inserted replaced
540:07239de796bb 541:e756a8c72c3d
       
     1 <?php
       
     2 
       
     3 /**
       
     4  * @file
       
     5  * Fetcher functions for the aggregator module.
       
     6  */
       
     7 
       
     8 /**
       
     9  * Implements hook_aggregator_fetch_info().
       
    10  */
       
    11 function aggregator_aggregator_fetch_info() {
       
    12   return array(
       
    13     'title' => t('Default fetcher'),
       
    14     'description' => t('Downloads data from a URL using Drupal\'s HTTP request handler.'),
       
    15   );
       
    16 }
       
    17 
       
    18 /**
       
    19  * Implements hook_aggregator_fetch().
       
    20  */
       
    21 function aggregator_aggregator_fetch($feed) {
       
    22   $feed->source_string = FALSE;
       
    23 
       
    24   // Generate conditional GET headers.
       
    25   $headers = array();
       
    26   if ($feed->etag) {
       
    27     $headers['If-None-Match'] = $feed->etag;
       
    28   }
       
    29   if ($feed->modified) {
       
    30     $headers['If-Modified-Since'] = gmdate(DATE_RFC7231, $feed->modified);
       
    31   }
       
    32 
       
    33   // Request feed.
       
    34   $result = drupal_http_request($feed->url, array('headers' => $headers));
       
    35 
       
    36   // Process HTTP response code.
       
    37   switch ($result->code) {
       
    38     case 304:
       
    39       break;
       
    40     case 301:
       
    41       $feed->url = $result->redirect_url;
       
    42       // Do not break here.
       
    43     case 200:
       
    44     case 302:
       
    45     case 307:
       
    46       if (!isset($result->data)) {
       
    47         $result->data = '';
       
    48       }
       
    49       if (!isset($result->headers)) {
       
    50         $result->headers = array();
       
    51       }
       
    52       $feed->source_string = $result->data;
       
    53       $feed->http_headers = $result->headers;
       
    54       break;
       
    55     default:
       
    56       watchdog('aggregator', 'The feed from %site seems to be broken, due to "%error".', array('%site' => $feed->title, '%error' => $result->code . ' ' . $result->error), WATCHDOG_WARNING);
       
    57       drupal_set_message(t('The feed from %site seems to be broken, because of error "%error".', array('%site' => $feed->title, '%error' => $result->code . ' ' . $result->error)));
       
    58   }
       
    59 
       
    60   return $feed->source_string === FALSE ? FALSE : TRUE;
       
    61 }