feed-io 1.0.0 : a PHP library built to serve and consume Atom/RSS feeds

feed-io has now finished its beta stage and is ready to be used in production environment. This library is 100 % pure PHP and depends only on PSR-2 for logging specifications. It also suggests Guzzle to consume external feeds, and if you don’t like this choice you’re free to write your own HTTP client and use it with feed-io.


Features are already listed in this previous post

To make it short, feed-io is able to serve and consume RSS / Atom news feeds with a strong OOP approach. It is flexible and you can use it to extend standard formats or to create your own if you need to.


feed-io is designed to be easily understood by anyone who wants to use it. It provides a fa├žade to help you with the most common operations, but if you need more flexibility you can use the core classes.


This class is the facade, it provides methods to use feed-io’s main features.

$feedIo = new \FeedIo\FeedIo($client, $logger);

$result = $feedIo->read('');

echo 'feed title : ' . $result->getFeed()->getTitle() . PHP_EOL;

foreach( $result->getFeed() as $item ) {
    echo 'item title : ' . $item->getTitle() . PHP_EOL;


This is the result of a read operation. It contains :

  • the Feed instance
  • Date and time of the request
  • value of the ‘modifiedSince’ header sent throught the request
  • the raw response
  • the DOM document
  • URL of the feed

So if you need to check something around the feed, it’s in the result.


Main standards are RSS, Atom and RDF and each of them are represented by a class extending StandardAbstract. A StandardAbstract instance is used for both parsing and formatting feeds using its RuleSet instances (one for the feed and one for the items).

So if you need to support a new format, it’s there. Just create a class extending StandardAbstract, implement the format’s specifications using the abstract methods and add it to feed-io. That’s it !

RuleSet and RuleAbstract

A RuleSet owns at least one rule (the default which is OptionalField). Each rule must be a RuleAbstract instance able to parse and format a DomElement according to its specifications. For instance, the Media class handles enclosure tags.

Each rule can be added to a ruleset instance at any time before parsing or formatting feeds. FeedInterface

This interface defines the behaviour of a class containing the feed itself. It extends ArrayIterator and ItemInterface.


This is the FeedInterface implementation provided by feed-io. Feel free to extend it or to implement your own.


Defines the behaviour of a class containing an item of the feed. It exposes methods to handle medias and optional elements. It extends NodeInterface which is the lowest level of abstraction and exposes methods to get and set most common attributes like the title and the URL of an item.


ItemInterface implementation provided by feed-io.

what’s coming next

Now that feed-io has been released in its first stable version, I will focus on FeedIoBundle to make it production ready before the end of June. So you can expect a first beta really soon.

Built with Hugo
Theme Stack designed by Jimmy