Recipe 12.12. Reading RSS and Atom Feeds


12.12.1. Problem

You want to retrieve RSS and Atom feeds and look at the items. This allows you to incorporate newsfeeds from multiple web sites into your application.

12.12.2. Solution

Use the MagpieRSS parser. Here's an example that reads the RSS feed for the php.announce mailing list:

<?php require 'rss_fetch.inc'; $feed = 'http://news.php.net/group.php?group=php.announce&format=rss'; $rss = fetch_rss( $feed ); print "<ul>\n"; foreach ($rss->items as $item) {     print '<li><a href="' . $item['link'] . '">' . $item['title'] . "</a></li>\n"; } print "</ul>\n"; ?>

12.12.3. Discussion

RSS (RDF Site Summary) is an easy-to-use headline or article syndication format written in XML.[] Many news web sites, such as the New York Times and the Washington Post, provide RSS feeds that update whenever new stories are published. Weblogs have also embraced RSS and having an RSS feed for your blog is a standard feature. The PHP web site also publishes RSS feeds for most PHP mailing lists.

[] RDF stands for Resource Definition Framework. RSS also stands for Rich Site Summary.

Atom is a similar XML syndication format. It extends many of the concepts in RSS, including a way to read and write Atom data. It also attempts to provide a more well-defined syntax for syndication than RSS, as the RSS specification doesn't always clearly enumerate exactly what is or isn't permissible in a feed.

Using MagpieRSS, retrieving and parsing RSS and Atom feeds are simple:

<?php $feed = 'http://news.php.net/group.php?group=php.announce&format=rss'; $rss = fetch_rss($feed); ?>

This example reads in the RSS feed for the php.announce mailing list. The feed is then parsed by fetch_rss( ) and stored internally within $rss.

While this feed is RSS 0.93, there's no need to specify this to MagpieRSS. Its fetch_rss( ) function detects the syndication format, including Atom, and formats the document accordingly.

Each RSS item is then retrieved as an associative array using the items property:

<?php print "<ul>\n"; foreach ($rss->items as $item) {     print '<li><a href="' . $item['link'] . '">' . $item['title'] . "</a></li>\n"; } print "</ul>\n"; ?>

This foreach loop creates an unordered list of items with the item title linking back to the URL associated with the complete article, as shown in Figure 12-1. Besides the required title and link fields, an item can have an optional description field that contains a brief write-up about the item.

php.announce RSS feed


Each channel also has an entry with information about the feed, as shown in Figure 12-2. To retrieve that data, call access the channel attribute:

<?php $feed = 'http://news.php.net/group.php?group=php.announce&format=rss'; $rss = fetch_rss($feed); print "<ul>\n"; foreach ($rss->channel as $key => $value) {     print "<li>$key: $value</li>\n"; } print "</ul>\n"; ?>

php.announce RSS channel information


12.12.4. See Also

The Magpie RSS home page at http://magpierss.sourceforge.net/; more information on RSS at http://en.wikipedia.org/wiki/RSS_(protocol).




PHP Cookbook, 2nd Edition
PHP Cookbook: Solutions and Examples for PHP Programmers
ISBN: 0596101015
EAN: 2147483647
Year: 2006
Pages: 445

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net