User Tools

Site Tools


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)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki