]> scripts.mit.edu Git - autoinstalls/wordpress.git/blobdiff - wp-includes/rss.php
Wordpress 2.7.1
[autoinstalls/wordpress.git] / wp-includes / rss.php
index 15b0a8dd78e34bca2df38c9f5376a2714176693a..9962773486de233bbd9d54779e1f443326186978 100644 (file)
@@ -17,7 +17,7 @@
  */
 do_action('load_feed_engine');
 
-
+/** RSS feed constant. */
 define('RSS', 'RSS');
 define('ATOM', 'Atom');
 define('MAGPIE_USER_AGENT', 'WordPress/' . $GLOBALS['wp_version']);
@@ -384,9 +384,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();
@@ -450,7 +459,7 @@ function fetch_rss ($url) {
                // setup 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 +524,55 @@ function fetch_rss ($url) {
 } // end fetch_rss()
 endif;
 
+/**
+ * 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 = "" ) {
-       // 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;
-       }
-
-       @$client->fetch($url);
-       return $client;
-
+       $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;
+       }
+       $response = new stdClass;
+       $response->status = $resp['response']['code'];
+       $response->response_code = $resp['response']['code'];
+       $response->headers = $resp['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);
@@ -570,11 +605,13 @@ function _response_to_rss ($resp) {
        } // end if ($rss and !$rss->error)
 }
 
-/*=======================================================================*\
-       Function:       init
-       Purpose:        setup constants with default values
-                               check for user overrides
-\*=======================================================================*/
+/**
+ * Setup constants with default values, unless user overrides.
+ *
+ * @since unknown
+ * @package External
+ * @subpackage MagpieRSS
+ */
 function init () {
        if ( defined('MAGPIE_INITALIZED') ) {
                return;
@@ -835,6 +872,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 '<ul>';
@@ -843,7 +890,7 @@ function wp_rss( $url, $num_items = -1 ) {
                        $rss->items = array_slice( $rss->items, 0, $num_items );
                }
 
-               foreach ( $rss->items as $item ) {
+               foreach ( (array) $rss->items as $item ) {
                        printf(
                                '<li><a href="%1$s" title="%2$s">%3$s</a></li>',
                                clean_url( $item['link'] ),
@@ -860,11 +907,27 @@ function wp_rss( $url, $num_items = -1 ) {
 endif;
 
 if ( !function_exists('get_rss') ) :
+/**
+ * Display RSS items in HTML list items.
+ *
+ * You have to specify which HTML list you want, either ordered or unordered
+ * before using the function. You also have to specify how many items you wish
+ * to display. You can't display all of them like you can with wp_rss()
+ * function.
+ *
+ * @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.
+ * @return bool False on failure.
+ */
 function get_rss ($url, $num_items = 5) { // Like get posts, but for RSS
        $rss = fetch_rss($url);
        if ( $rss ) {
                $rss->items = array_slice($rss->items, 0, $num_items);
-               foreach ($rss->items as $item ) {
+               foreach ( (array) $rss->items as $item ) {
                        echo "<li>\n";
                        echo "<a href='$item[link]' title='$item[description]'>";
                        echo htmlentities($item['title']);
@@ -877,4 +940,4 @@ function get_rss ($url, $num_items = 5) { // Like get posts, but for RSS
 }
 endif;
 
-?>
\ No newline at end of file
+?>