proger/feeder

Standalone module to generate standards-compliant RSS 0.92, 2.0 and Atom feeds from a single data source.

dev-master 2014-03-16 21:24 UTC

This package is not auto-updated.

Last update: 2024-03-16 12:07:10 UTC


README

This bundle lets you generate RSS 2.0, RSS 0.92 and Atom feeds by just setting the data you want - and Feeder will take care of mapping it to the target standard-specific output. All Feeder scripts are in public domain and require PHP 5+.

Sample generated feeds, detailed API and description | Laravel bundle | Forum thread

It's used in real action on Laravel.ru's article feed: RSS 2.0 | RSS 0.92 | Atom [all three are generated using the code almost identical to the example below].

Features

Before creating this I have dug through every bit in those specifications (RSS 2.0, 0.92 and Atom) so it should be pretty complete.

  • Pretty output with indentation
  • W3C Validation passed for all 3 formats
  • Unicode-aware
  • You can generate feeds from YAML text files without coding anything - details

Example

$feed = Feed::make();

$feed->logo(asset('logo.png'))
     ->icon(URL::home().'favicon.ico')
     ->webmaster('Proger_XP proger.xp@gmail.com http://i-forge.net/me')
     ->author   ('Proger_XP proger.xp@gmail.com http://i-forge.net/me')
     ->rating('SFW')
     ->pubdate(time())
     ->ttl(60)
     ->title('My feed')
     ->description('Sample feed generated by PHP Feeder.')
     ->copyright('(c) '.date('Y').' Example.com')
     ->permalink(route('feed', 'rss20'))
     ->category('PHP')
     ->language('ru_RU')
     ->baseurl(URL::home());

foreach ($posts as $post) {
  $feed->entry()->published($post['published'])
                ->description()->add('html', $post['synopsis'])->up()
                ->title($post['title'])
                ->permalink($post['url'])
                ->author($post['author'])
                ->updated($post['posted']);
}

$feed->send('rss20');
// this is a shortcut for calling $feed->feed()->send(...);
// you can also just $feed->Rss20(), Rss092() or Atom();

Installation

Composer

Available under proger/feeder at Packagist.

Laravel 3

php artisan bundle:install feeder

example-*.php and smile.png files are only samples and are not required for work. .htaccess and entry.php are only used if you're using TextFeeder. chained.php is only used if you're using chained calls (like in the example above). feeder.php is the core set of classes that is self-contained.

application/bundles.php:

'feeder' => array(
  // when the bundle is started all Feeder classes are automatically loaded
  // so you can either autostart it or have autoloader mappings (more efficient).
  //'auto' => true,

  'autoloads' => array(
    'map' => array(
      'Feed' => '(:bundle)/chained.php',

      'FeedChannel' => '(:bundle)/feeder.php',
      'FeedEntry' => '(:bundle)/feeder.php',
      'Feeder' => '(:bundle)/feeder.php',
      'TextFeeder' => '(:bundle)/feeder.php',
      'FeedOut' => '(:bundle)/feeder.php',
    ),
  ),
),

The list of autoloader mappings depends on your application - if you're just using chained calls (as in the example above) you only need the first Feed => chained mapping; otherwise you might want to autostart the bundle if you're unsure. You can also define IoC containers for starting the bundle when it's used.