2008-12-22 19:38:31 +00:00
< ? php
/**
* @ file
* Fetcher functions for the aggregator module .
*/
/**
2009-12-04 16:49:48 +00:00
* Implements hook_aggregator_fetch_info () .
2008-12-22 19:38:31 +00:00
*/
function aggregator_aggregator_fetch_info () {
return array (
'title' => t ( 'Default fetcher' ),
'description' => t ( 'Downloads data from a URL using Drupal\'s HTTP request handler.' ),
);
}
/**
2009-12-04 16:49:48 +00:00
* Implements hook_aggregator_fetch () .
2008-12-22 19:38:31 +00:00
*/
function aggregator_aggregator_fetch ( $feed ) {
$feed -> source_string = FALSE ;
2009-01-26 14:08:44 +00:00
2008-12-22 19:38:31 +00:00
// Generate conditional GET headers.
$headers = array ();
if ( $feed -> etag ) {
$headers [ 'If-None-Match' ] = $feed -> etag ;
}
if ( $feed -> modified ) {
2009-09-25 23:53:26 +00:00
$headers [ 'If-Modified-Since' ] = gmdate ( DATE_RFC1123 , $feed -> modified );
2008-12-22 19:38:31 +00:00
}
// Request feed.
2008-12-26 21:01:57 +00:00
$result = drupal_http_request ( $feed -> url , array ( 'headers' => $headers ));
2008-12-22 19:38:31 +00:00
// Process HTTP response code.
switch ( $result -> code ) {
case 304 :
break ;
case 301 :
$feed -> url = $result -> redirect_url ;
// Do not break here.
case 200 :
case 302 :
case 307 :
if ( ! isset ( $result -> data )) {
$result -> data = '' ;
}
if ( ! isset ( $result -> headers )) {
$result -> headers = array ();
}
$feed -> source_string = $result -> data ;
$feed -> http_headers = $result -> headers ;
break ;
default :
watchdog ( 'aggregator' , 'The feed from %site seems to be broken, due to "%error".' , array ( '%site' => $feed -> title , '%error' => $result -> code . ' ' . $result -> error ), WATCHDOG_WARNING );
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 )));
}
2010-01-08 11:03:54 +00:00
return $feed -> source_string === FALSE ? FALSE : TRUE ;
2008-12-22 19:38:31 +00:00
}