18

I want to parse an existing RSS feed from another website with php and then store certain parts of it in a mysql database.

I'm very competent with php and mysql but have never worked with rss feeds before, where should i start?

  1. is there an equivalent to file_get_contents() for getting rss into php?
  2. are rss feeds broken down into xml/microdata or do i need to use regex to grab bits?

cheers!

kovshenin
  • 31,813
  • 4
  • 35
  • 46
Haroldo
  • 36,607
  • 46
  • 127
  • 169

4 Answers4

31

Short Version: ( NEW )

demo: http://so.lucafilosofi.com/get-rss-feed-into-php-array-possible/

$feed = 'http://stackoverflow.com/opensearch.xml';
$feed_to_array = (array) simplexml_load_file($feed);
//OR $feed_to_array = (array) new SimpleXmlElement( file_get_contents($feed) );
print_r($feed_to_array);

//output

Array
(
    [ShortName] => Stack Overflow
    [Description] => Search Stack Overflow: Q&A for professional and enthusiast programmers
    [InputEncoding] => UTF-8
    [Image] => http://sstatic.net/stackoverflow/img/favicon.ico
    [Url] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [type] => text/html
                    [method] => get
                    [template] => http://stackoverflow.com/search?q={searchTerms}
                )

        )

)

Long Version: ( OLD )

<?php

$rss_tags = array(  
'title',  
'link',  
'guid',  
'comments',  
'description',  
'pubDate',  
'category',  
);  
$rss_item_tag = 'item';  
$rss_url = 'http://www.webaddict.info/feeds/news.xml';

$rssfeed = rss_to_array($rss_item_tag, $rss_tags, $rss_url);

echo '<pre>';  
print_r($rssfeed);

function rss_to_array($tag, $array, $url) {  
  $doc = new DOMdocument();  
  $doc->load($url);  
  $rss_array = array();  
  $items = array();  
  foreach($doc-> getElementsByTagName($tag) AS $node) {  
    foreach($array AS $key => $value) {  
      $items[$value] = $node->getElementsByTagName($value)->item(0)->nodeValue;  
    }  
    array_push($rss_array, $items);  
  }  
  return $rss_array;  
}  
?>
Luca Filosofi
  • 30,905
  • 9
  • 70
  • 77
  • cool, i'll give it a try. I also found this: http://magpierss.sourceforge.net/ ? – Haroldo Mar 16 '10 at 14:17
  • +1 for suggesting DOM parsing for RSS analyzation instead of using a library, although there were many different formats out there the last time I have written my own RSS reader. – Residuum Mar 16 '10 at 14:22
  • Woah, weird quotes you had there. I fixed it for you. – Franz Mar 16 '10 at 14:30
  • this is perfect, works a treat and using just 1 function! (the example doesn't work because the rss feed no longer exists) thanks again – Haroldo Mar 16 '10 at 14:52
  • Also make sure you checkout SimpleXML which is fantastic for dealing with any XML, including RSS. http://uk.php.net/simplexml – David Yell Mar 31 '10 at 16:12
0

I believe Simplepie will do this for you as well.

Tim Post
  • 33,371
  • 15
  • 110
  • 174
0

If others come past, an end-to-end very simple free code example of this is on;

http://code.google.com/p/rssingest/

Daniel Iversen
  • 469
  • 1
  • 6
  • 12
-1

The best Feed consumer library in PHP is RSSClient[1]

[1] https://github.com/desarrolla2/RSSClient

desarrolla2
  • 233
  • 2
  • 11