====== RSS - Combine multiple RSS Feeds ====== This script will allow you to add RSS feeds from multiple sites and integrate them into yours dynamically. channel->item as $key) { // variable to use later $temp_title = $key->title; $link = $key->link; // I don't always have enough room on the page to show the // entire title of the RSS feed, so I am just limiting it here // and then adding 3 dots (...) to show that the title is longer than displayed $title = str_replace('-', '', substr($key->title, 0, 25)) . "..."; // display it to the page, even though the text of the link will be // limited to a specific number of characters // when you roll over it with your mouse, it will show the full title // in the little popup that is built into the href tag echo "
  • $title
  • "; } } // we are done, so get rid of it $xml = NULL; }
    ===== Another way ===== urls = array_merge( $this->urls, array_values($feeds) ); } public function grabRss() { foreach ( $this->urls as $feed ) { $data = @new SimpleXMLElement( $feed, 0, true ); if ( !$data ) throw new Exception( 'Could not load: ' . $feed ); foreach ( $data->channel->item as $item ) { $this->data[] = $item; } } } public function amalgamate() { shuffle( $this->data ); $temp = array(); foreach ( $this->data as $item ) { if ( !in_array($item->link, $this->links($temp)) ) { $temp[] = $item; } } $this->data = $temp; shuffle( $this->data ); } private function links( array $items ) { $links = array(); foreach ( $items as $item ) { $links[] = $item->link; } return $links; } } /********* Example *********/ $urls = array( 'http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/football/teams/m/man_city/rss.xml', 'http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/football/teams/l/liverpool/rss.xml' ); try { $feeds = new Feed_Amalgamator; $feeds->addFeeds( $urls ); $feeds->grabRss(); $feeds->amalgamate(); } catch ( exception $e ) { die( $e->getMessage() ); } foreach ( $feeds->data as $item ) : extract( (array) $item ); ?>

    ===== Another Way ===== xpath('/rss//item')); } // Sort feed entries by pubDate (ascending) usort($entries, function ($x, $y) { //return strtotime($x->pubDate) - strtotime($y->pubDate); return strtotime($y->pubDate) - strtotime($x->pubDate); }); print_r($entries); ?> ===== Another way ===== With 4 lines, I import a rss to an array. $feed = implode(file('http://yourdomains.com/feed.rss')); $xml = simplexml_load_string($feed); $json = json_encode($xml); $array = json_decode($json,TRUE); Try also changing 1st line for one of these... $feed = file_get_contents('http://yourdomains.com/feed.rss'); $feed = json_decode(json_encode(simplexml_load_file('news.google.com‌​/?output=rss')), true); For a more complex solution $feed = new DOMDocument(); $feed->load('file.rss'); $json = array(); $json['title'] = $feed->getElementsByTagName('channel')->item(0)->getElementsByTagName('title')->item(0)->firstChild->nodeValue; $json['description'] = $feed->getElementsByTagName('channel')->item(0)->getElementsByTagName('description')->item(0)->firstChild->nodeValue; $json['link'] = $feed->getElementsByTagName('channel')->item(0)->getElementsByTagName('link')->item(0)->firstChild->nodeValue; $items = $feed->getElementsByTagName('channel')->item(0)->getElementsByTagName('item'); $json['item'] = array(); $i = 0; foreach($items as $key => $item) { $title = $item->getElementsByTagName('title')->item(0)->firstChild->nodeValue; $description = $item->getElementsByTagName('description')->item(0)->firstChild->nodeValue; $pubDate = $item->getElementsByTagName('pubDate')->item(0)->firstChild->nodeValue; $guid = $item->getElementsByTagName('guid')->item(0)->firstChild->nodeValue; $json['item'][$key]['title'] = $title; $json['item'][$key]['description'] = $description; $json['item'][$key]['pubdate'] = $pubDate; $json['item'][$key]['guid'] = $guid; } echo json_encode($json);