Search code examples
rsssimplepie

Having trouble trying to display multiple simplepie rss feeds, as well as one merged


So here is the main simplepie code I'm trying to use, and I don't really understand how to initialize the other feeds I have set up. Basically what I'm trying to do is place each of those $feeds into different divs so the first div displays all 3 feeds, and then one div for each after that.

<?php
// Include the SimplePie library
require_once('simplepie.inc');

// Because we're using multiple feeds, let's just set the headers here.
header('Content-type:text/html; charset=utf-8');

// These are the feeds we want to use
$feeds = array(
    'SITE ONE URL',
    'SITE TWO URL',
    'SITE THREE URL');

$feeds2 = array(
    'SITE ONE URL');

$feeds3 = array(
    'SITE TWO URL');

$feeds4 = array(
    'SITE THREE URL');


// This array will hold the items we'll be grabbing.
$first_items = array();

// Let's go through the array, feed by feed, and store the items we want.
foreach ($feeds as $url)
{
    // Use the long syntax
    $feed = new SimplePie();
    $feed->set_feed_url($url);
    $feed->init();

    // How many items per feed should we try to grab?
    $items_per_feed = 3;

    // As long as we're not trying to grab more items than the feed has, go through them one by one and add them to the array.
    for ($x = 0; $x < $feed->get_item_quantity($items_per_feed); $x++)
    {
        $first_items[] = $feed->get_item($x);
    }

    // We're done with this feed, so let's release some memory.
    unset($feed);
}

// We need to sort the items by date with a user-defined sorting function.  Since usort() won't accept "SimplePie::sort_items", we need to wrap it in a new function.
function sort_items($a, $b)
{
    return SimplePie::sort_items($a, $b);
}

// Now we can sort $first_items with our custom sorting function.
usort($first_items, "sort_items");


// Begin the (X)HTML page.
?>

Solution

  • I would like to help but need to understand better what you are trying to do. As per my understanding you want to populate a top div with ALL THE CONTENTS OF THE THREE FEEDS and, then, below, have a separate div with each of the feeds contents. Like:

    <div id='feeds'>
     feed1-content-1
     feed1-content-2
     feed1-content-3
     feed2-content-1
     feed2-content-2
     feed2-content-3
     feed3-content-1
     feed3-content-2
     feed3-content-3
    </div>
    <div id='feeds2'>
     feed1-content-1
     feed1-content-2
     feed1-content-3
    </div>
    <div id='feeds3'>
     feed2-content-1
     feed2-content-2
     feed2-content-3
    </div>
    <div id='feeds4'>
     feed3-content-1
     feed3-content-2
     feed3-content-3
    </div>
    

    If that is what you want, I would like to throw in my 2cents: why the redundancy? However, only the coder really knows what (s)he wants to achieve. My suggestion is simple: just append a paragraph into the divs:

    $('#feeds').append('<p>'+feed+'</p>');
    and the appropriate feed into the appropriate div in the same way.