SimplePie:组合多个Feed,但每个Feed的项目数不同

时间:2014-02-11 09:56:28

标签: php simplepie

我正在尝试使用SimplePie显示两个(当前,但这个数字可能会增加)Feed。我正在使用what I think is SimplePie's preferred way of doing multiple feeds,它运行良好 - 只要我对每个Feed中显示的项目数量相同感到满意。

但是,我希望能够灵活地告诉SimplePie显示两个组合输入的输出,但是从一个输入中获取10个项目(例如),而从另一个输入中只读取5个项目,这样组合输出就是倾向于一个(更重要的)来源。您认为最好的方法是什么?

这是我目前的代码。它使用多个feed对象,但如果更合理,我很乐意使用单个SimplePie对象。

<?php
require_once('simplepie/autoloader.php');

// Create a new SimplePie object
$feed = new SimplePie();

$feed->set_feed_url(array(
    'http://example.com/feed1.rss',
    'http://example.com/feed2.rss'
));

$feed->set_item_limit(5);
$feed->init();
$feed->set_cache_location('/var/www/simplepie/library/cache');
$feed->set_cache_duration(600);
$feed->handle_content_type();

?>
<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Feed test</title>
</head>

<body>
    <?php
    // Begin feed output

    foreach ($feed->get_items() as $item):

        $authorObject = $item->get_author();
        $author = $authorObject->get_name();

        $feed = $item->get_feed();

        // Rest of the code removed
    ?>
</body>

1 个答案:

答案 0 :(得分:1)

有一项功能可以限制每次Feed提取的商品数量:set_item_limit()

$feed->set_item_limit(5);

但是,这会从每个Feed中提取相同数量的文章。您可以将其设置为10或任何您想要的最大值。我能想到的唯一方法(在我的头脑中)做你想做的就是在get_items循环中设置你自己的计数器,每次通过检查feed数据中的内容,如url或其他东西。

$cntr1 = 0;
$cntr2 = 0;
foreach ($feed->get_items() as $item) {
    if ($cntr1 <= 5 && strstr($item->get_feed()->get_permalink(), [your search criteria])) {
        // do your fetch of the item stuff for feed 1
        $cntr1++;
    }
    ...
}