function DefaultFetcher::fetch

Implements Drupal\aggregator\Plugin\FetcherInterface::fetch().

Overrides FetcherInterface::fetch

File

drupal/core/modules/aggregator/lib/Drupal/aggregator/Plugin/aggregator/fetcher/DefaultFetcher.php, line 31
Definition of Drupal\aggregator\Plugin\aggregator\fetcher\DefaultFetcher.

Class

DefaultFetcher
Defines a default fetcher implementation.

Namespace

Drupal\aggregator\Plugin\aggregator\fetcher

Code

function fetch(&$feed) {
  $request = drupal_container()
    ->get('http_default_client')
    ->get($feed->url);
  $feed->source_string = FALSE;

  // Generate conditional GET headers.
  if ($feed->etag) {
    $request
      ->addHeader('If-None-Match', $feed->etag);
  }
  if ($feed->modified) {
    $request
      ->addHeader('If-Modified-Since', gmdate(DATE_RFC1123, $feed->modified));
  }
  try {
    $response = $request
      ->send();
    $feed->source_string = $response
      ->getBody(TRUE);
    $feed->etag = $response
      ->getEtag();
    $feed->modified = strtotime($response
      ->getLastModified());
    $feed->http_headers = $response
      ->getHeaders();
    return TRUE;
  } catch (BadResponseException $e) {
    $response = $e
      ->getResponse();
    watchdog('aggregator', 'The feed from %site seems to be broken due to "%error".', array(
      '%site' => $feed->title,
      '%error' => $response
        ->getStatusCode() . ' ' . $response
        ->getReasonPhrase(),
    ), WATCHDOG_WARNING);
    drupal_set_message(t('The feed from %site seems to be broken because of error "%error".', array(
      '%site' => $feed->title,
      '%error' => $response
        ->getStatusCode() . ' ' . $response
        ->getReasonPhrase(),
    )));
    return FALSE;
  }
}