Alexandre Debril

web programmer & open source contributor

With Atom and RSS being the major syndication formats since more than a decade, there's not much room for another one. In fact, trying to introduce a new one in 2017 is a real challenge as those XML-based formats are used by billions of websites and known by every web developers.

But maybe that's the problem : two XML-based formats. Working with both of them is tricky, as there both share the same goal using similar schemas on top of a complex markup language. Look at feed-io's \Rule namespace, you may see by yourself that sometimes I had some headaches writing this library.

So, in order to offer an easier way to serve feeds, two web veterans (Brent Simmons and Manton Reece) proposed a new standard based on JSON with the following motivations :

We — Manton Reece and Brent Simmons — have noticed that JSON has become the developers’ choice for APIs, and that developers will often go out of their way to avoid XML. JSON is simpler to read and write, and it’s less prone to bugs.

So we developed JSON Feed, a format similar to RSS and Atom but in JSON. It reflects the lessons learned from our years of work reading and publishing feeds.

Here's the example provided in JSON Feed's specifications :

{
    "version": "https://jsonfeed.org/version/1",
    "title": "My Example Feed",
    "home_page_url": "https://example.org/",
    "feed_url": "https://example.org/feed.json",
    "items": [
        {
            "id": "2",
            "content_text": "This is a second item.",
            "url": "https://example.org/second-item"
        },
        {
            "id": "1",
            "content_html": "<p>Hello, world!</p>",
            "url": "https://example.org/initial-post"
        }
    ]
}

Really easy to read. So easy I decided to implement this standard in feed-io.

From now on, feed-i is a little bit more than a library. Since version 2.3, it comes with a basic client you can use through your terminal :

[code language="bash"] ./bin/feedio read http://php.net/feed.atom -c 1 [/code]

The instruction above will fetch php.net's feed and display its latest item. I used the "count" option to get only one, but this is not mandatory; without it, feed-io displays all the items included in the feed.

The command line interface will probably be the main subject of the next few releases. I'm thinking about features like JSON output or items ordering and if you have any suggestion, feel free to submit a new issue on Github.

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

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.

design

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.

Continue reading