*
* @package External
* @subpackage MagpieRSS
+ * @deprecated 3.0.0 Use SimplePie instead.
*/
-/*
- * Hook to use another RSS object instead of MagpieRSS
+/**
+ * Deprecated. Use SimplePie (class-simplepie.php) instead.
+ */
+_deprecated_file( basename( __FILE__ ), '3.0.0', WPINC . '/class-simplepie.php' );
+
+/**
+ * Fires before MagpieRSS is loaded, to optionally replace it.
+ *
+ * @since 2.3.0
+ * @deprecated 3.0.0
*/
-do_action('load_feed_engine');
+do_action( 'load_feed_engine' );
/** RSS feed constant. */
define('RSS', 'RSS');
var $_CONTENT_CONSTRUCTS = array('content', 'summary', 'info', 'title', 'tagline', 'copyright');
- function MagpieRSS ($source) {
+ /**
+ * PHP5 constructor.
+ */
+ function __construct( $source ) {
# if PHP xml isn't compiled in, die
#
if ( !function_exists('xml_parser_create') )
- trigger_error( "Failed to load PHP's XML Extension. http://www.php.net/manual/en/ref.xml.php" );
+ trigger_error( "Failed to load PHP's XML Extension. https://secure.php.net/manual/en/ref.xml.php" );
$parser = @xml_parser_create();
if ( !is_resource($parser) )
- trigger_error( "Failed to create an instance of PHP's XML parser. http://www.php.net/manual/en/ref.xml.php");
-
+ trigger_error( "Failed to create an instance of PHP's XML parser. https://secure.php.net/manual/en/ref.xml.php");
$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,
$this->normalize();
}
+ /**
+ * PHP4 constructor.
+ */
+ public function MagpieRSS( $source ) {
+ self::__construct( $source );
+ }
+
function feed_start_element($p, $element, &$attrs) {
$el = $element = strtolower($element);
$attrs = array_change_key_case($attrs, CASE_LOWER);
// check for a namespace, and split if found
$ns = false;
if ( strpos( $element, ':' ) ) {
- list($ns, $el) = split( ':', $element, 2);
+ list($ns, $el) = explode( ':', $element, 2);
}
if ( $ns and $ns != 'rdf' ) {
$this->current_namespace = $ns;
$this->incontent = $el;
-
}
// if inside an Atom content construct (e.g. content or summary) field treat tags as text
}
}
-
-
function feed_cdata ($p, $text) {
if ($this->feed_type == ATOM and $this->incontent)
}
elseif ($this->feed_type == ATOM and $this->incontent ) {
// balance tags properly
- // note: i don't think this is actually neccessary
+ // note: This may not actually be necessary
if ( $this->stack[0] == $el )
{
$this->append_content("</$el>");
/**
* Build Magpie object based on RSS from URL.
*
- * @since unknown
+ * @since 1.5.0
* @package External
* @subpackage MagpieRSS
*
else {
// Flow
// 1. check cache
- // 2. if there is a hit, make sure its fresh
+ // 2. if there is a hit, make sure it's fresh
// 3. if cached obj fails freshness check, fetch remote
// 4. if remote fails, return stale object, or error
debug($cache->ERROR, E_USER_WARNING);
}
-
$cache_status = 0; // response of check_cache
$request_headers = array(); // HTTP headers to send with fetch
$rss = 0; // parsed RSS object
// else attempt a conditional get
- // setup headers
+ // set up headers
if ( $cache_status == 'STALE' ) {
$rss = $cache->get( $url );
if ( isset($rss->etag) and $rss->last_modified ) {
/**
* Retrieve URL headers and content using WP HTTP Request API.
*
- * @since unknown
+ * @since 1.5.0
* @package External
* @subpackage MagpieRSS
*
* @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));
+function _fetch_remote_file($url, $headers = "" ) {
+ $resp = wp_safe_remote_request( $url, array( 'headers' => $headers, 'timeout' => MAGPIE_FETCH_TIME_OUT ) );
if ( is_wp_error($resp) ) {
$error = array_shift($resp->errors);
$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 ( wp_remote_retrieve_headers( $resp ) as $key => $value ) {
+ if ( !is_array($value) ) {
+ $return_headers[] = "$key: $value";
+ } else {
+ foreach ( $value as $v )
+ $return_headers[] = "$key: $v";
+ }
+ }
+
$response = new stdClass;
- $response->status = $resp['response']['code'];
- $response->response_code = $resp['response']['code'];
- $response->headers = $resp['headers'];
- $response->results = $resp['body'];
+ $response->status = wp_remote_retrieve_response_code( $resp );
+ $response->response_code = wp_remote_retrieve_response_code( $resp );
+ $response->headers = $return_headers;
+ $response->results = wp_remote_retrieve_body( $resp );
return $response;
}
/**
* Retrieve
*
- * @since unknown
+ * @since 1.5.0
* @package External
* @subpackage MagpieRSS
*
- * @param unknown_type $resp
- * @return unknown
+ * @param array $resp
+ * @return MagpieRSS|bool
*/
function _response_to_rss ($resp) {
$rss = new MagpieRSS( $resp->results );
if ( $rss && (!isset($rss->ERROR) || !$rss->ERROR) ) {
// find Etag, and Last-Modified
- foreach( (array) $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);
$val = "";
}
- if ( $field == 'ETag' ) {
+ if ( $field == 'etag' ) {
$rss->etag = $val;
}
- if ( $field == 'Last-Modified' ) {
+ if ( $field == 'last-modified' ) {
$rss->last_modified = $val;
}
}
}
/**
- * Setup constants with default values, unless user overrides.
+ * Set up constants with default values, unless user overrides.
*
- * @since unknown
+ * @since 1.5.0
* @package External
* @subpackage MagpieRSS
*/
var $MAX_AGE = 43200; // when are files stale, default twelve hours
var $ERROR = ''; // accumulate error messages
- function RSSCache ($base='', $age='') {
+ /**
+ * PHP5 constructor.
+ */
+ function __construct( $base = '', $age = '' ) {
$this->BASE_CACHE = WP_CONTENT_DIR . '/cache';
if ( $base ) {
$this->BASE_CACHE = $base;
}
+ /**
+ * PHP4 constructor.
+ */
+ public function RSSCache( $base = '', $age = '' ) {
+ self::__construct( $base, $age );
+ }
+
/*=======================================================================*\
Function: set
Purpose: add an item to the cache, keyed on url
Input: url from wich the rss file was fetched
- Output: true on sucess
+ Output: true on success
\*=======================================================================*/
function set ($url, $rss) {
- global $wpdb;
$cache_option = 'rss_' . $this->file_name( $url );
set_transient($cache_option, $rss, $this->MAX_AGE);
/**
* Display all RSS items in a HTML ordered list.
*
- * @since unknown
+ * @since 1.5.0
* @package External
* @subpackage MagpieRSS
*
'<li><a href="%1$s" title="%2$s">%3$s</a></li>',
esc_url( $item['link'] ),
esc_attr( strip_tags( $item['description'] ) ),
- htmlentities( $item['title'] )
+ esc_html( $item['title'] )
);
}
* to display. You can't display all of them like you can with wp_rss()
* function.
*
- * @since unknown
+ * @since 1.5.0
* @package External
* @subpackage MagpieRSS
*
foreach ( (array) $rss->items as $item ) {
echo "<li>\n";
echo "<a href='$item[link]' title='$item[description]'>";
- echo htmlentities($item['title']);
+ echo esc_html($item['title']);
echo "</a><br />\n";
echo "</li>\n";
}
}
}
endif;
-
-?>