function create($url, $enable_grabber = false, $force_rtl = false, $cloak_referrer = false, $group_ids = array(), $create_group = '') { $feed_id = false; $db = Database::getInstance('db'); // Discover the feed $reader = new Reader(Config\get_reader_config()); $resource = $reader->discover($url); // Feed already there if ($db->table('feeds')->eq('feed_url', $resource->getUrl())->count()) { throw new UnexpectedValueException(); } // Parse the feed $parser = $reader->getParser($resource->getUrl(), $resource->getContent(), $resource->getEncoding()); if ($enable_grabber) { $parser->enableContentGrabber(); } $feed = $parser->execute(); // Save the feed $result = $db->table('feeds')->save(array('title' => $feed->getTitle(), 'site_url' => $feed->getSiteUrl(), 'feed_url' => $feed->getFeedUrl(), 'download_content' => $enable_grabber ? 1 : 0, 'rtl' => $force_rtl ? 1 : 0, 'last_modified' => $resource->getLastModified(), 'last_checked' => time(), 'etag' => $resource->getEtag(), 'cloak_referrer' => $cloak_referrer ? 1 : 0)); if ($result) { $feed_id = $db->getLastId(); Group\update_feed_groups($feed_id, $group_ids, $create_group); Item\update_all($feed_id, $feed->getItems()); Favicon\create_feed_favicon($feed_id, $feed->getSiteUrl(), $feed->getIcon()); } return $feed_id; }
/** * Adds a new feed to the database. * * @param Request $request * * @return Redirect */ public function store(Request $request) { $this->validate($request, $this->rules); $url = $request->input('url'); try { $reader = new Reader(); $resource = $reader->discover($url); $parser = $reader->getParser($resource->getUrl(), $resource->getContent(), $resource->getEncoding()); $feedRaw = $parser->execute(); } catch (PicoFeedException $e) { Log::error($e->getMessage()); flash()->error(trans('feed.create.unknown-error', ['error' => $e->getMessage()])); return redirect()->route('feed.create'); } $feed = new Feed(); $feed->user_id = Sentinel::getUser()->id; $feed->title = $feedRaw->title; $feed->url = $feedRaw->feed_url; $feed->save(); flash()->success(trans('feed.create.success')); return redirect()->route('feed.index'); }
/** * @group online */ public function testDiscover() { $reader = new Reader(); $client = $reader->discover('http://www.universfreebox.com/'); $this->assertEquals('http://www.universfreebox.com/backend.php', $client->getUrl()); $this->assertInstanceOf('PicoFeed\\Parser\\Rss20', $reader->getParser($client->getUrl(), $client->getContent(), $client->getEncoding())); $reader = new Reader(); $client = $reader->discover('http://planete-jquery.fr'); $this->assertInstanceOf('PicoFeed\\Parser\\Rss20', $reader->getParser($client->getUrl(), $client->getContent(), $client->getEncoding())); $reader = new Reader(); $client = $reader->discover('http://cabinporn.com/'); $this->assertEquals('http://cabinporn.com/rss', $client->getUrl()); $this->assertInstanceOf('PicoFeed\\Parser\\Rss20', $reader->getParser($client->getUrl(), $client->getContent(), $client->getEncoding())); $reader = new Reader(); $client = $reader->discover('http://linuxfr.org/'); $this->assertEquals('http://linuxfr.org/news.atom', $client->getUrl()); $this->assertInstanceOf('PicoFeed\\Parser\\Atom', $reader->getParser($client->getUrl(), $client->getContent(), $client->getEncoding())); }
function create($url, $enable_grabber = false, $force_rtl = false, $cloak_referrer = false) { try { $db = Database::get('db'); // Discover the feed $reader = new Reader(Config\get_reader_config()); $resource = $reader->discover($url); // Feed already there if ($db->table('feeds')->eq('feed_url', $resource->getUrl())->count()) { return false; } // Parse the feed $parser = $reader->getParser($resource->getUrl(), $resource->getContent(), $resource->getEncoding()); if ($enable_grabber) { $parser->enableContentGrabber(); } $feed = $parser->execute(); // Save the feed $result = $db->table('feeds')->save(array('title' => $feed->getTitle(), 'site_url' => $feed->getSiteUrl(), 'feed_url' => $feed->getFeedUrl(), 'download_content' => $enable_grabber ? 1 : 0, 'rtl' => $force_rtl ? 1 : 0, 'last_modified' => $resource->getLastModified(), 'last_checked' => time(), 'etag' => $resource->getEtag(), 'cloak_referrer' => $cloak_referrer ? 1 : 0)); if ($result) { $feed_id = $db->getConnection()->getLastId(); Item\update_all($feed_id, $feed->getItems()); fetch_favicon($feed_id, $feed->getSiteUrl(), $feed->getIcon()); Config\write_debug(); return (int) $feed_id; } } catch (PicoFeedException $e) { } Config\write_debug(); return false; }