fetch_rss

The timeline below displays how wordpress function fetch_rss has changed across different WordPress versions. If a version is not listed, refer to the next available version below.

WordPress Version: 6.2

/**
 * Build Magpie object based on RSS from URL.
 *
 * @since 1.5.0
 * @package External
 * @subpackage MagpieRSS
 *
 * @param string $url URL to retrieve feed.
 * @return MagpieRSS|false MagpieRSS object on success, false on failure.
 */
function fetch_rss($url)
{
    // initialize constants
    init();
    if (!isset($url)) {
        // error("fetch_rss called without a url");
        return false;
    }
    // if cache is disabled
    if (!MAGPIE_CACHE_ON) {
        // fetch file, and parse it
        $resp = _fetch_remote_file($url);
        if (is_success($resp->status)) {
            return _response_to_rss($resp);
        } else {
            // error("Failed to fetch $url and cache is off");
            return false;
        }
    } else {
        // Flow
        // 1. check cache
        // 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
        $cache = new RSSCache(MAGPIE_CACHE_DIR, MAGPIE_CACHE_AGE);
        if (MAGPIE_DEBUG and $cache->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
        $errormsg = 0;
        // errors, if any
        if (!$cache->ERROR) {
            // return cache HIT, MISS, or STALE
            $cache_status = $cache->check_cache($url);
        }
        // if object cached, and cache is fresh, return cached obj
        if ($cache_status == 'HIT') {
            $rss = $cache->get($url);
            if (isset($rss) and $rss) {
                $rss->from_cache = 1;
                if (MAGPIE_DEBUG > 1) {
                    debug("MagpieRSS: Cache HIT", E_USER_NOTICE);
                }
                return $rss;
            }
        }
        // else attempt a conditional get
        // set up headers
        if ($cache_status == 'STALE') {
            $rss = $cache->get($url);
            if (isset($rss->etag) and $rss->last_modified) {
                $request_headers['If-None-Match'] = $rss->etag;
                $request_headers['If-Last-Modified'] = $rss->last_modified;
            }
        }
        $resp = _fetch_remote_file($url, $request_headers);
        if (isset($resp) and $resp) {
            if ($resp->status == '304') {
                // we have the most current copy
                if (MAGPIE_DEBUG > 1) {
                    debug("Got 304 for {$url}");
                }
                // reset cache on 304 (at minutillo insistent prodding)
                $cache->set($url, $rss);
                return $rss;
            } elseif (is_success($resp->status)) {
                $rss = _response_to_rss($resp);
                if ($rss) {
                    if (MAGPIE_DEBUG > 1) {
                        debug("Fetch successful");
                    }
                    // add object to cache
                    $cache->set($url, $rss);
                    return $rss;
                }
            } else {
                $errormsg = "Failed to fetch {$url}. ";
                if ($resp->error) {
                    # compensate for Snoopy's annoying habit to tacking
                    # on '\n'
                    $http_error = substr($resp->error, 0, -2);
                    $errormsg .= "(HTTP Error: {$http_error})";
                } else {
                    $errormsg .= "(HTTP Response: " . $resp->response_code . ')';
                }
            }
        } else {
            $errormsg = "Unable to retrieve RSS file for unknown reasons.";
        }
        // else fetch failed
        // attempt to return cached object
        if ($rss) {
            if (MAGPIE_DEBUG) {
                debug("Returning STALE object for {$url}");
            }
            return $rss;
        }
        // else we totally failed
        // error( $errormsg );
        return false;
    }
    // end if ( !MAGPIE_CACHE_ON ) {
}

WordPress Version: 5.7

/**
 * Build Magpie object based on RSS from URL.
 *
 * @since 1.5.0
 * @package External
 * @subpackage MagpieRSS
 *
 * @param string $url URL to retrieve feed.
 * @return MagpieRSS|false MagpieRSS object on success, false on failure.
 */
function fetch_rss($url)
{
    // initialize constants
    init();
    if (!isset($url)) {
        // error("fetch_rss called without a url");
        return false;
    }
    // if cache is disabled
    if (!MAGPIE_CACHE_ON) {
        // fetch file, and parse it
        $resp = _fetch_remote_file($url);
        if (is_success($resp->status)) {
            return _response_to_rss($resp);
        } else {
            // error("Failed to fetch $url and cache is off");
            return false;
        }
    } else {
        // Flow
        // 1. check cache
        // 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
        $cache = new RSSCache(MAGPIE_CACHE_DIR, MAGPIE_CACHE_AGE);
        if (MAGPIE_DEBUG and $cache->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
        $errormsg = 0;
        // errors, if any
        if (!$cache->ERROR) {
            // return cache HIT, MISS, or STALE
            $cache_status = $cache->check_cache($url);
        }
        // if object cached, and cache is fresh, return cached obj
        if ($cache_status == 'HIT') {
            $rss = $cache->get($url);
            if (isset($rss) and $rss) {
                $rss->from_cache = 1;
                if (MAGPIE_DEBUG > 1) {
                    debug("MagpieRSS: Cache HIT", E_USER_NOTICE);
                }
                return $rss;
            }
        }
        // else attempt a conditional get
        // set up headers
        if ($cache_status == 'STALE') {
            $rss = $cache->get($url);
            if (isset($rss->etag) and $rss->last_modified) {
                $request_headers['If-None-Match'] = $rss->etag;
                $request_headers['If-Last-Modified'] = $rss->last_modified;
            }
        }
        $resp = _fetch_remote_file($url, $request_headers);
        if (isset($resp) and $resp) {
            if ($resp->status == '304') {
                // we have the most current copy
                if (MAGPIE_DEBUG > 1) {
                    debug("Got 304 for {$url}");
                }
                // reset cache on 304 (at minutillo insistent prodding)
                $cache->set($url, $rss);
                return $rss;
            } elseif (is_success($resp->status)) {
                $rss = _response_to_rss($resp);
                if ($rss) {
                    if (MAGPIE_DEBUG > 1) {
                        debug("Fetch successful");
                    }
                    // add object to cache
                    $cache->set($url, $rss);
                    return $rss;
                }
            } else {
                $errormsg = "Failed to fetch {$url}. ";
                if ($resp->error) {
                    # compensate for Snoopy's annoying habbit to tacking
                    # on '\n'
                    $http_error = substr($resp->error, 0, -2);
                    $errormsg .= "(HTTP Error: {$http_error})";
                } else {
                    $errormsg .= "(HTTP Response: " . $resp->response_code . ')';
                }
            }
        } else {
            $errormsg = "Unable to retrieve RSS file for unknown reasons.";
        }
        // else fetch failed
        // attempt to return cached object
        if ($rss) {
            if (MAGPIE_DEBUG) {
                debug("Returning STALE object for {$url}");
            }
            return $rss;
        }
        // else we totally failed
        // error( $errormsg );
        return false;
    }
    // end if ( !MAGPIE_CACHE_ON ) {
}

WordPress Version: 3.7

/**
 * Build Magpie object based on RSS from URL.
 *
 * @since 1.5.0
 * @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();
    if (!isset($url)) {
        // error("fetch_rss called without a url");
        return false;
    }
    // if cache is disabled
    if (!MAGPIE_CACHE_ON) {
        // fetch file, and parse it
        $resp = _fetch_remote_file($url);
        if (is_success($resp->status)) {
            return _response_to_rss($resp);
        } else {
            // error("Failed to fetch $url and cache is off");
            return false;
        }
    } else {
        // Flow
        // 1. check cache
        // 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
        $cache = new RSSCache(MAGPIE_CACHE_DIR, MAGPIE_CACHE_AGE);
        if (MAGPIE_DEBUG and $cache->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
        $errormsg = 0;
        // errors, if any
        if (!$cache->ERROR) {
            // return cache HIT, MISS, or STALE
            $cache_status = $cache->check_cache($url);
        }
        // if object cached, and cache is fresh, return cached obj
        if ($cache_status == 'HIT') {
            $rss = $cache->get($url);
            if (isset($rss) and $rss) {
                $rss->from_cache = 1;
                if (MAGPIE_DEBUG > 1) {
                    debug("MagpieRSS: Cache HIT", E_USER_NOTICE);
                }
                return $rss;
            }
        }
        // else attempt a conditional get
        // set up headers
        if ($cache_status == 'STALE') {
            $rss = $cache->get($url);
            if (isset($rss->etag) and $rss->last_modified) {
                $request_headers['If-None-Match'] = $rss->etag;
                $request_headers['If-Last-Modified'] = $rss->last_modified;
            }
        }
        $resp = _fetch_remote_file($url, $request_headers);
        if (isset($resp) and $resp) {
            if ($resp->status == '304') {
                // we have the most current copy
                if (MAGPIE_DEBUG > 1) {
                    debug("Got 304 for {$url}");
                }
                // reset cache on 304 (at minutillo insistent prodding)
                $cache->set($url, $rss);
                return $rss;
            } elseif (is_success($resp->status)) {
                $rss = _response_to_rss($resp);
                if ($rss) {
                    if (MAGPIE_DEBUG > 1) {
                        debug("Fetch successful");
                    }
                    // add object to cache
                    $cache->set($url, $rss);
                    return $rss;
                }
            } else {
                $errormsg = "Failed to fetch {$url}. ";
                if ($resp->error) {
                    # compensate for Snoopy's annoying habbit to tacking
                    # on '\n'
                    $http_error = substr($resp->error, 0, -2);
                    $errormsg .= "(HTTP Error: {$http_error})";
                } else {
                    $errormsg .= "(HTTP Response: " . $resp->response_code . ')';
                }
            }
        } else {
            $errormsg = "Unable to retrieve RSS file for unknown reasons.";
        }
        // else fetch failed
        // attempt to return cached object
        if ($rss) {
            if (MAGPIE_DEBUG) {
                debug("Returning STALE object for {$url}");
            }
            return $rss;
        }
        // else we totally failed
        // error( $errormsg );
        return false;
    }
    // end if ( !MAGPIE_CACHE_ON ) {
}