rss:combine_multiple_rss_feeds
This is an old revision of the document!
RSS - Combine multiple RSS Feeds
This script will allow you to add RSS feeds from multiple sites and integrate them into yours dynamically.
<?php // simple timeout in seconds $timeout = 2; // variable to be used later $xml_string = ""; // let's open the socket to the RSS feed $fp = @fsockopen("feeds.warhammeronline.com", 80, $errno, $errstr, $timeout); // check to see if the fsockopen returned a valid resource if ($fp) { // now that we have a valid resource, let's request the data that we need fwrite($fp, "GET /warherald/RSSFeed.war?type=current HTTP/1.0\r\n"); fwrite($fp, "Host: feeds.warhammeronline.com\r\n"); fwrite($fp, "Connection: Close\r\n\r\n"); // let's wait until data becomes available within the stream stream_set_blocking($fp, TRUE); // but let's only wait for a specific amount of time stream_set_timeout($fp,$timeout); // get the header/meta data to use, currently we are just using this to see if we timeout or not $info = stream_get_meta_data($fp); // while there is still data in the stream and we haven't timedout, then get the next bit of data while ((!feof($fp)) && (!$info['timed_out'])) { // get the next line in the stream $xml_string .= fgets($fp, 4096); // get the header/meta data to use, currently we are just using this to see if we timeout or not $info = stream_get_meta_data($fp); // this isn't required, but I like to send the data to the browser as soon as possible ob_flush; flush(); } // we are done with the stream, so get rid of it fclose($fp); } // we timed out, so let the user know, if you want if ($info['timed_out']) { echo "Warhammer News feed - Connection timed out"; } else { // we need to strip off the initial part of the stream that we don't need, we just want the XML from the RSS feed $xml_string = substr($xml_string, strpos($xml_string, '<')); // we are using the built in php function to parse the xml // and convert it into an object we can use $xml = simplexml_load_string($xml_string); // check to see if the object was created from the RSS feed if (!is_object($xml)) { echo "Warhammer News feed - Error converting xml"; } else { // this section, is a bit hardcoded for this particular RSS feed, // but basically, you just walk the XML tree as an object // here we are looping through all the children of this particular parent foreach($xml->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 "<li><a href='$link' target='_blank' title='$temp_title'>$title</a></li>"; } } // we are done, so get rid of it $xml = NULL; }
rss/combine_multiple_rss_feeds.1476019689.txt.gz · Last modified: 2020/07/15 09:30 (external edit)