/** * 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 its 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 ) { }
function fetch_request($request) { global $CFG; make_upload_directory('/cache/youtube'); $cache = new RSSCache($CFG->dataroot . '/cache/youtube', YOUTUBE_CACHE_EXPIRATION); $cache_status = $cache->check_cache($request); if ($cache_status == 'HIT') { $cached_response = $cache->get($request); $xmlobj = XML_unserialize($cached_response); return $this->render_video_list($xmlobj); } if ($cache_status == 'STALE') { $cached_response = $cache->get($request); } $response = download_file_content($request); if (empty($response)) { $response = $cached_response; } else { $cache->set($request, $response); } $xmlobj = XML_unserialize($response); return $this->render_video_list($xmlobj); }
function fetch_request($request) { global $CFG; make_upload_directory('/cache/youtube'); $cache = new RSSCache($CFG->dataroot . '/cache/youtube', YOUTUBE_CACHE_EXPIRATION); $cache_status = $cache->check_cache($request); if ($cache_status == 'HIT') { $cached_response = $cache->get($request); // TODO: Stop using phpxml, switching to DOM/Simple for this // TODO: Drop lib/phpxml if 0 uses in core/contrib $xmlobj = XML_unserialize($cached_response); return $this->render_video_list($xmlobj); } if ($cache_status == 'STALE') { $cached_response = $cache->get($request); } $response = download_file_content($request); if (empty($response)) { $response = $cached_response; } else { $cache->set($request, $response); } // TODO: Stop using phpxml, switching to DOM/Simple for this // TODO: Drop lib/phpxml if 0 uses in core/contrib $xmlobj = XML_unserialize($response); return $this->render_video_list($xmlobj); }
function fetch_request($request) { global $CFG; make_upload_directory('/cache/flickr'); $cache = new RSSCache($CFG->dataroot . '/cache/flickr', FLICKR_CACHE_EXPIRATION); $cache_status = $cache->check_cache($request); if ($cache_status == 'HIT') { $cached_response = $cache->get($request); return $cached_response; } if ($cache_status == 'STALE') { $cached_response = $cache->get($request); } $response = download_file_content($request); if (empty($response)) { $response = $cached_response; } else { $cache->set($request, $response); } return $response; }
<div class="rss_text">[+text+]</div> <a href="[+link+]">[+more+]</a> </div> EOF; $output = ''; $basePath = $modx->config['base_path']; //Work with cache if ($cacheAge) { define(CACHE_DIR, $basePath . $modx->getCachePath()); define(CACHE_AGE, $cacheAge); require_once $basePath . 'manager/media/rss/rss_cache.inc'; $cache = new RSSCache(CACHE_DIR, CACHE_AGE); $cache_status = $cache->check_cache($url); if ($cache_status == 'HIT') { //have fresh cache $output = $cache->get($baseurl); //uncomment this if you want to see and control cache work //RSS::_log('FROM CACHE'); } } if ($output == '') { //cache is off OR have no cache OR it's STALE //use system class Snoopy //this class is used in manager panel to show news on startpage. require_once $basePath . 'manager/media/rss/extlib/Snoopy.class.inc'; $client = new Snoopy(); $client->agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 GTB7.1'; $client->read_timeout = '10'; $client->use_gzip = true; $datas = array(); foreach ($urls as $url) {