web-dev-qa-db-fra.com

Combinaison de flux RSS et tri avec fetch_feed

J'essaie de créer un flux des 10 publications les plus récentes à partir de 5 flux différents combinés dans une seule liste. J'ai trouvé un moyen de combiner les flux mais je n'ai pas été en mesure de les limiter facilement à 10 et de les trier par date.

Quelqu'un peut me diriger dans la bonne direction? Merci!!!

<ul>
<?php $rsslist = array(
'http://www.nrel.gov/news/press/rss/rss.xml',
'http://www.pewenvironment.org/rss/campaigns-8589935316',
'http://www.ashrae.org/RssFeeds/ashrae.xml',
'http://www.districtenergy.org/blog/category/idea-activity/feed/',
'http://www.districtenergy.org/blog/category/industry-news/feed/'
 );

$feedlist = array();
foreach ( $rsslist as $rssurl ) $feedlist []= fetch_feed( $rssurl ); /* store in feed array for later access */

$current_item_cycle = 0;
while ( sizeof($feedlist) ) { /* while feedlist is not empty */ 

    foreach ( $feedlist as $index => $feed ) { /* cycle through each feed */

        if (!$item = $feed->get_item($current_item_cycle++)) unset($feedlist[$index]); /* if feed has not more items unset */

        else /* echo it out */ { ?>
            <li>
            <?php echo $item->get_date('j F Y | g:i a') . $item->get_permalink(); ?>
            </li>
        <?php }
    }
} ?>
</ul>
1
Tim Bowen

Ce code devrait fonctionner. J'ai commenté l'un de vos flux. Quand je le décomprime, il arrête de trier les choses correctement. Il semble que quelque chose ne va pas avec cela. Il n'est pas correctement formaté dans le navigateur comme les autres.

<ul>
<?php 
$rsslist = array(
    #'http://www.pewenvironment.org/rss/campaigns-8589935316',
    'http://www.ashrae.org/RssFeeds/ashrae.xml',
    'http://www.districtenergy.org/blog/category/idea-activity/feed/',
    'http://www.districtenergy.org/blog/category/industry-news/feed/',
    'http://www.nrel.gov/news/press/rss/rss.xml'
);

// Fetch all of the feeds into a simplePie mashup
$rss = fetch_feed($rsslist);
// Set the max items to either 10 or all items if there are less than 10
$maxitems = $rss->get_item_quantity(10);

// Get the items (0-10)
$rss_items = $rss->get_items(0, $maxitems); 

// If there are no items, output that
if ($maxitems == 0) {
    echo '<li>No items.</li>';
// Otherwise loop over the items
} else {
    foreach ( $rss_items as $item ) { ?>
        <li>
        <?php echo $item->get_date() . $item->get_permalink(); ?>
        </li>
    <?php 
    }
}
?>
</ul>
1
Jake