X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/8a06f4f9392d1ac373442f82ee40428a3cb81395..2376fb745f4ae8c6bd2353127524e0b28005143d:/wp-includes/rss.php diff --git a/wp-includes/rss.php b/wp-includes/rss.php index 15b0a8dd..6feefdcb 100644 --- a/wp-includes/rss.php +++ b/wp-includes/rss.php @@ -12,12 +12,17 @@ * @subpackage MagpieRSS */ +/** + * Deprecated. Use SimplePie (class-simplepie.php) instead. + */ +_deprecated_file( basename( __FILE__ ), '3.0', WPINC . '/class-simplepie.php' ); + /* * Hook to use another RSS object instead of MagpieRSS */ do_action('load_feed_engine'); - +/** RSS feed constant. */ define('RSS', 'RSS'); define('ATOM', 'Atom'); define('MAGPIE_USER_AGENT', 'WordPress/' . $GLOBALS['wp_version']); @@ -62,7 +67,7 @@ class MagpieRSS { $this->parser = $parser; # pass in parser, and a reference to this object - # setup handlers + # set up handlers # xml_set_object( $this->parser, $this ); xml_set_element_handler($this->parser, @@ -170,7 +175,7 @@ class MagpieRSS { { // if tags are inlined, then flatten $attrs_str = join(' ', - array_map('map_attrs', + array_map(array('MagpieRSS', 'map_attrs'), array_keys($attrs), array_values($attrs) ) ); @@ -384,9 +389,18 @@ class MagpieRSS { } } -require_once( dirname(__FILE__) . '/class-snoopy.php'); if ( !function_exists('fetch_rss') ) : +/** + * Build Magpie object based on RSS from URL. + * + * @since unknown + * @package External + * @subpackage MagpieRSS + * + * @param string $url URL to retrieve feed + * @return bool|MagpieRSS false on failure or MagpieRSS object on success. + */ function fetch_rss ($url) { // initialize constants init(); @@ -447,10 +461,10 @@ function fetch_rss ($url) { // else attempt a conditional get - // setup headers + // set up headers if ( $cache_status == 'STALE' ) { $rss = $cache->get( $url ); - if ( $rss->etag and $rss->last_modified ) { + if ( isset($rss->etag) and $rss->last_modified ) { $request_headers['If-None-Match'] = $rss->etag; $request_headers['If-Last-Modified'] = $rss->last_modified; } @@ -515,29 +529,68 @@ function fetch_rss ($url) { } // end fetch_rss() endif; -function _fetch_remote_file ($url, $headers = "" ) { - // Snoopy is an HTTP client in PHP - $client = new Snoopy(); - $client->agent = MAGPIE_USER_AGENT; - $client->read_timeout = MAGPIE_FETCH_TIME_OUT; - $client->use_gzip = MAGPIE_USE_GZIP; - if (is_array($headers) ) { - $client->rawheaders = $headers; +/** + * Retrieve URL headers and content using WP HTTP Request API. + * + * @since unknown + * @package External + * @subpackage MagpieRSS + * + * @param string $url URL to retrieve + * @param array $headers Optional. Headers to send to the URL. + * @return Snoopy style response + */ +function _fetch_remote_file($url, $headers = "" ) { + $resp = wp_remote_request($url, array('headers' => $headers, 'timeout' => MAGPIE_FETCH_TIME_OUT)); + if ( is_wp_error($resp) ) { + $error = array_shift($resp->errors); + + $resp = new stdClass; + $resp->status = 500; + $resp->response_code = 500; + $resp->error = $error[0] . "\n"; //\n = Snoopy compatibility + return $resp; + } + + // Snoopy returns headers unprocessed. + // Also note, WP_HTTP lowercases all keys, Snoopy did not. + $return_headers = array(); + foreach ( $resp['headers'] as $key => $value ) { + if ( !is_array($value) ) { + $return_headers[] = "$key: $value"; + } else { + foreach ( $value as $v ) + $return_headers[] = "$key: $v"; + } } - @$client->fetch($url); - return $client; + $response = new stdClass; + $response->status = $resp['response']['code']; + $response->response_code = $resp['response']['code']; + $response->headers = $return_headers; + $response->results = $resp['body']; + return $response; } +/** + * Retrieve + * + * @since unknown + * @package External + * @subpackage MagpieRSS + * + * @param unknown_type $resp + * @return unknown + */ function _response_to_rss ($resp) { $rss = new MagpieRSS( $resp->results ); // if RSS parsed successfully - if ( $rss and !$rss->ERROR) { + if ( $rss && (!isset($rss->ERROR) || !$rss->ERROR) ) { // find Etag, and Last-Modified - foreach($resp->headers as $h) { + foreach( (array) $resp->headers as $h) { // 2003-03-02 - Nicola Asuni (www.tecnick.com) - fixed bug "Undefined offset: 1" if (strpos($h, ": ")) { list($field, $val) = explode(": ", $h, 2); @@ -547,11 +600,11 @@ function _response_to_rss ($resp) { $val = ""; } - if ( $field == 'ETag' ) { + if ( $field == 'etag' ) { $rss->etag = $val; } - if ( $field == 'Last-Modified' ) { + if ( $field == 'last-modified' ) { $rss->last_modified = $val; } } @@ -570,11 +623,13 @@ function _response_to_rss ($resp) { } // end if ($rss and !$rss->error) } -/*=======================================================================*\ - Function: init - Purpose: setup constants with default values - check for user overrides -\*=======================================================================*/ +/** + * Set up constants with default values, unless user overrides. + * + * @since unknown + * @package External + * @subpackage MagpieRSS + */ function init () { if ( defined('MAGPIE_INITALIZED') ) { return; @@ -673,18 +728,9 @@ class RSSCache { Output: true on sucess \*=======================================================================*/ function set ($url, $rss) { - global $wpdb; $cache_option = 'rss_' . $this->file_name( $url ); - $cache_timestamp = 'rss_' . $this->file_name( $url ) . '_ts'; - // shouldn't these be using get_option() ? - if ( !$wpdb->get_var( $wpdb->prepare( "SELECT option_name FROM $wpdb->options WHERE option_name = %s", $cache_option ) ) ) - add_option($cache_option, '', '', 'no'); - if ( !$wpdb->get_var( $wpdb->prepare( "SELECT option_name FROM $wpdb->options WHERE option_name = %s", $cache_timestamp ) ) ) - add_option($cache_timestamp, '', '', 'no'); - - update_option($cache_option, $rss); - update_option($cache_timestamp, time() ); + set_transient($cache_option, $rss, $this->MAX_AGE); return $cache_option; } @@ -699,15 +745,13 @@ class RSSCache { $this->ERROR = ""; $cache_option = 'rss_' . $this->file_name( $url ); - if ( ! get_option( $cache_option ) ) { + if ( ! $rss = get_transient( $cache_option ) ) { $this->debug( "Cache doesn't contain: $url (cache option: $cache_option)" ); return 0; } - $rss = get_option( $cache_option ); - return $rss; } @@ -720,23 +764,12 @@ class RSSCache { \*=======================================================================*/ function check_cache ( $url ) { $this->ERROR = ""; - $cache_option = $this->file_name( $url ); - $cache_timestamp = 'rss_' . $this->file_name( $url ) . '_ts'; - - if ( $mtime = get_option($cache_timestamp) ) { - // find how long ago the file was added to the cache - // and whether that is longer then MAX_AGE - $age = time() - $mtime; - if ( $this->MAX_AGE > $age ) { - // object exists and is current + $cache_option = 'rss_' . $this->file_name( $url ); + + if ( get_transient($cache_option) ) { + // object exists and is current return 'HIT'; - } - else { - // object exists but is old - return 'STALE'; - } - } - else { + } else { // object does not exist return 'MISS'; } @@ -835,6 +868,16 @@ function parse_w3cdtf ( $date_str ) { endif; if ( !function_exists('wp_rss') ) : +/** + * Display all RSS items in a HTML ordered list. + * + * @since unknown + * @package External + * @subpackage MagpieRSS + * + * @param string $url URL of feed to display. Will not auto sense feed URL. + * @param int $num_items Optional. Number of items to display, default is all. + */ function wp_rss( $url, $num_items = -1 ) { if ( $rss = fetch_rss( $url ) ) { echo '