/** * @group ZF-8330 */ public function testGetsFeedLinksAndNormalisesRelativeUrlsOnUriWithPath() { try { $currClient = Zend_Feed_Reader::getHttpClient(); $testAdapter = new Zend_Http_Client_Adapter_Test(); $testAdapter->setResponse(new Zend_Http_Response(200, array(), '<!DOCTYPE html><html><head><link rel="alternate" type="application/rss+xml" href="../test.rss"><link rel="alternate" type="application/atom+xml" href="/test.atom"></head><body></body></html>')); Zend_Feed_Reader::setHttpClient(new Zend_Http_Client(null, array('adapter' => $testAdapter))); $links = Zend_Feed_Reader::findFeedLinks('http://foo/bar'); Zend_Feed_Reader::setHttpClient($currClient); } catch (Exception $e) { $this->fail($e->getMessage()); } $this->assertEquals('http://foo/test.rss', $links->rss); $this->assertEquals('http://foo/test.atom', $links->atom); }
private static function _processResources(array $config) { if (self::$_lock) { /** * @see Conjoon_Log */ require_once 'Conjoon/Log.php'; Conjoon_Log::log("Conjoon_Modules_Groupware_Feeds_ImportHelper::_processResources " . "- possible race condition", Zend_Log::INFO); } self::$_lock = true; $uri = $config['uri']; $requestTimeout = $config['requestTimeout']; $useCache = $config['useCache']; $useConditionalGet = $config['useConditionalGet']; $callback = $config['callback']; /** * @see Zend_Feed_Reader */ require_once 'Zend/Feed/Reader.php'; if ($useCache !== false) { // set the reader's cache here /** * @see Conjoon_Cache_Factory */ require_once 'Conjoon/Cache/Factory.php'; /** * @see Conjoon_Keys */ require_once 'Conjoon/Keys.php'; $frCache = Conjoon_Cache_Factory::getCache(Conjoon_Keys::CACHE_FEED_READER, Zend_Registry::get(Conjoon_Keys::REGISTRY_CONFIG_OBJECT)->toArray()); if ($frCache) { Zend_Feed_Reader::setCache($frCache); if ($useConditionalGet !== false) { Zend_Feed_Reader::useHttpConditionalGet(); } } } Zend_Feed_Reader::getHttpClient()->setConfig(array('timeout' => $requestTimeout)); $result = self::$callback($uri); Zend_Feed_Reader::reset(); self::$_lock = false; return $result; }
/** * @group ZF-11184 */ public function testImportingUriWithEmptyResponseBodyTriggersException() { $currClient = Zend_Feed_Reader::getHttpClient(); $testAdapter = new Zend_Http_Client_Adapter_Test(); $testAdapter->setResponse(new Zend_Http_Response(200, array(), '')); Zend_Feed_Reader::setHttpClient(new Zend_Http_Client(null, array('adapter' => $testAdapter))); $this->setExpectedException('Zend_Feed_Exception', 'Feed failed to load'); $result = Zend_Feed_Reader::import('http://www.example.com'); }
/** * reads the RSS feeds and extracts the 'description' field from each one. * Uses caching and http conditional GET to ensure that the feed is only * read if it has been updated * * @return array */ protected function _getFeedData() { //Get the feed url from the configuration options $options = $this->_getConfigOptions(); $feed_url = $options['feed']['url']; $cache_dir = $options['cache']['directory']; // set cache - this allows us to check whether the feed has been updated $cache = Zend_Cache::factory('Core', 'File', array('lifetime' => null), array('cache_dir' => $cache_dir)); Zend_Feed_Reader::setCache($cache); // set Reader properties to allow Conditional GET Requests Zend_Feed_Reader::useHttpConditionalGet(); // disable SSL peer verification as it can cause problems from some isp's $options = array('ssl' => array('verify_peer' => false, 'allow_self_signed' => true)); $adapter = new Zend_Http_Client_Adapter_Socket(); $adapter->setStreamContext($options); Zend_Feed_Reader::getHttpClient()->setAdapter($adapter); // interrogate the RSS feed try { $rss_data = Zend_Feed_Reader::import($feed_url); } catch (Zend_Feed_Exception $e) { // feed import failed Zend_Registry::get('logger')->log('Exception importing feed: ' . $e->getMessage(), Zend_Log::WARN); return null; } catch (Zend_Http_Client_Exception $e) { Zend_Registry::get('logger')->log('Error with URL: ' . $e->getMessage(), Zend_Log::WARN); return null; } catch (Exception $e) { Zend_Registry::get('logger')->log('Unknown error when reading feed: ' . $e->getMessage(), Zend_Log::WARN); return null; } $entries = array(); // response status will be 200 if new data, 304 if not modified $last_response = Zend_Feed_Reader::getHttpClient()->getLastResponse(); if ($last_response) { $response_status = $last_response->getStatus(); // Only process if new data if (200 === $response_status) { foreach ($rss_data as $item) { $entry['description'] = $item->getDescription(); $entries[] = $entry; } if ($this->_getVerbose()) { $this->getResponse()->appendBody(new Zend_Date() . ': ' . count($entries) . ' new entries downloaded from rss feed' . PHP_EOL); } } else { if ($this->_getVerbose()) { $this->getResponse()->appendBody(new Zend_Date() . ': ' . 'No new data found' . PHP_EOL); } } } return $entries; }