Example #1
0
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;
}
Example #2
0
 /**
  * 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');
 }
Example #3
0
 /**
  * @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()));
 }
Example #4
0
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;
}