* @author Bernhard Posselt * @copyright 2012 Alessandro Cosentino * @copyright 2012-2014 Bernhard Posselt */ namespace OCA\News\Fetcher; use FeedIo\Reader\ReadErrorException; class Fetcher { /** * List of fetchers. * @var IFeedFetcher[] */ private $fetchers; public function __construct() { $this->fetchers = []; } /** * Add an additional fetcher * * @param IFeedFetcher $fetcher the fetcher */ public function registerFetcher(IFeedFetcher $fetcher): void { $this->fetchers[] = $fetcher; } /** * Fetch a feed from remote * * @param string $url remote url of the feed * @param boolean $getFavicon if the favicon should also be fetched, defaults to true * @param string|null $lastModified a last modified value from an http header defaults to false. * If lastModified matches the http header from the feed no results are fetched * @param bool $fullTextEnabled If true use a scraper to download the full article * @param string|null $user if given, basic auth is set for this feed * @param string|null $password if given, basic auth is set for this feed. Ignored if user is empty * * @throws ReadErrorException if FeedIO fails * @return array an array containing the new feed and its items, first * element being the Feed and second element being an array of Items */ public function fetch( string $url, bool $getFavicon = true, ?string $lastModified = null, bool $fullTextEnabled = false, ?string $user = null, ?string $password = null ): array { foreach ($this->fetchers as $fetcher) { if (!$fetcher->canHandle($url)) { continue; } return $fetcher->fetch( $url, $getFavicon, $lastModified, $fullTextEnabled, $user, $password ); } return [null, []]; } }