SimplePie并从blogspot.com获取多个提要

时间:2012-03-09 00:57:42

标签: rss feeds blogger simplepie blogspot

过去几天我一直在使用SimplePie做很多工作,我注意到它并不总是对待Blogger Feed。如果我将Blogger Feed传递给SimplePie,例如http://davetaylorminiatures.blogspot.com/http://sippinonpaintwater.blogspot.com/feeds/posts/default?alt=rss,它会很好地显示它,但是当我传递一系列有效的Feed时,一些来自blogspot而另一些则不是来自blogspot,而是来自SimplePie,没有返回的blogspot项目。如果我让它发现feed或传入指定RSS的feed。似乎没关系。

如果Blogger博客使用FeedBurner作为其Feed,则可以使用此示例http://feeds.feedburner.com/FromTheWarp SimplePie将包含“From the Warp”中的项目,其中包含来自其他有效Feed的合并Feed中的blogspot托管博客。

我一直在做大量的feed合并,起初我认为这与发布日期或本地缓存源有关,但是我已经吹走了我的本地缓存文件并运行了很多测试。

一个blogspot Feed适用于SimplePie,传递一组feed和blogspot feed似乎被忽略,它们似乎也没有在本地缓存。由于我知道各个feed在feed阅读器中工作,甚至在SimplePie News Blocks 2基于演示的代码中,为什么当我在数组中传递它们时它不起作用?这是SimplePie或Blogger中的错误还是我遗漏了一些明显的错误。

我编写了以下代码来测试和演示这种行为,重要的是在运行之前不会缓存源我相信。

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

$feed1 = new SimplePie(); // For this test I want four seperate feeds
$feed2 = new SimplePie();
$feed3 = new SimplePie();
$feed4 = new SimplePie();
$feed5 = new SimplePie(); // Fetching the feeds before merging seems to matter with Blogger feeds!

echo "Blogger Feed One http://davetaylorminiatures.blogspot.com/ \n";
echo "---------------------------------------------------------- \n";

$feed1->set_feed_url('http://davetaylorminiatures.blogspot.com/');
$feed1->init();

foreach ($feed1->get_items() as $item)
{
echo $item->get_title();
echo "\n";
}

echo "\n";

echo "Blogger Feed Two http://sippinonpaintwater.blogspot.com/feeds/posts/default?alt=rss \n";
echo "----------------------------------------------------------------------------------- \n";

$feed2->set_feed_url('http://sippinonpaintwater.blogspot.com/feeds/posts/default?alt=rss');
$feed2->init();

foreach ($feed2->get_items() as $item)
{
echo $item->get_title();
echo "\n";
}

echo "\n";

echo "Non-Blogger Feed http://www.witchhunter.net/blog/ \n";
echo "------------------------------------------------- \n";

$feed3->set_feed_url('http://www.witchhunter.net/blog/');
$feed3->init();

foreach ($feed3->get_items() as $item)
{
echo $item->get_title();
echo "\n";
}

echo "\n";

echo "Merged Feeds Test \n";

$feed4->set_feed_url(array('http://davetaylorminiatures.blogspot.com/',
                        'http://sippinonpaintwater.blogspot.com/feeds/posts/default?alt=rss',
                        'http://www.witchhunter.net/blog/'));
$feed4->init();

echo "Merged Feeds Item Titles \n";
echo "------------------------ \n";

foreach ($feed4->get_items() as $item)
{
echo $item->get_title();
echo "\n";
}

echo "\n";

echo "Same Merged Feeds Item and Feed Title \n";
echo "------------------------------------- \n";

foreach ($feed4->get_items() as $item)
{
    echo "\n";
echo $item->get_title();
echo "\n";
echo "From feed: ";
echo $item->get_feed()->get_title();
echo "\n";
}

echo "\n";

echo "Merged Feeds Test, different set of Three Feeds \n";

$feed5->set_feed_url(file('testFeeds.txt'));
$feed5->init();

echo "Merged Feeds Item Titles \n";
echo "------------------------ \n";

foreach ($feed5->get_items() as $item)
{
echo $item->get_title();
echo "\n";
}

echo "\n";

echo "Same Merged Feeds Item and Feed Title \n";
echo "------------------------------------- \n";

foreach ($feed5->get_items() as $item)
{
    echo "\n";
echo $item->get_title();
echo "\n";
echo "From feed: ";
echo $item->get_feed()->get_title();
echo "\n";
}

?>

testFeeds.txt的内容是:

http://cursedtreasures.blogspot.com/
http://sidneyroundwood.blogspot.com/feeds/posts/default?alt=rss
http://feeds.feedburner.com/ChestOfColors

我想知道将Feed放在外部文件中是否重要,因为这是我更喜欢获取多个Feed的方式。 $ feed5的输出是奇怪的,它只会在第一次运行时返回Chest of Colors的结果。一旦Feed开始被缓存或者您首先单独获取Feed,这似乎很重要。这就是现在$ feed5的输出:

  

合并饲料测试,三种不同的饲料

     

合并供稿项目标题

     刷回顾:Winsor Newton系列7对迷迭香和Co NMM金制作快速简便的第五届胸部颜色   微缩交换摘要Warploque缩图:Jebzakkah B'Ork -   回顾月份的缩影:2012年1月之间的线路 -   第5集金色恶魔2011:杀戮之剑赢家游戏   工作坊:FineCast Jabberslythe - 回顾本月的缩影:   2011年12月罗密欧模特:让巴特 - 评论

     

相同的合并供稿项目和Feed标题

     

刷子评论:Winsor Newton系列7 vs Rosemary和Co来自饲料:   胸部的颜色 - 所有关于微型绘画

     

NMM黄金制作快速简便从饲料:胸部颜色 - 所有关于   微型画

     

第五届胸部颜色微型交换摘要来自饲料:胸部   颜色 - 所有关于微型画

     

Warploque缩图:Jebzakkah B'Ork - 来自饲料的评论:胸部   颜色 - 所有关于微型画

     

本月的缩影:2012年1月从饲料:胸部的颜色 - 全部   关于微型绘画

     

在线之间 - 第5集从饲料:胸部的颜色 - 所有关于   微型画

     

2011年金色恶魔:杀戮之剑赢家来自饲料:胸部   颜色 - 所有关于微型画

     

游戏工作坊:FineCast Jabberslythe - 来自饲料的评论:胸部   颜色 - 所有关于微型画

     

本月缩影:2011年12月来自饲料:胸部颜色 - 全部   关于微型绘画

     

罗密欧模特:让巴特 - 评论来自饲料:胸部的颜色 - 全部   关于微型绘画

除了在您尝试合并之前是否已经单独获取和缓存Blogger Feed这一显而易见的问题之外,还有任何关于正在发生的事情的想法?测试脚本已启动并运行here

1 个答案:

答案 0 :(得分:0)

我正在使用SimplePie 1.3(最新版本),并以这种方式执行代码,它似乎对我有用:

$feed = new SimplePie();

$feed_ary = array();
$feed_ary[] = 'http://simplepie.org/blog/feed/';
$feed_ary[] = 'http://hurtnordic.blogspot.com/feeds/posts/default?alt=rss';
$feed_ary[] = 'http://rochesternordicracing.blogspot.com/feeds/posts/default?alt=rss';

// Set the feed(s) to process. Blogspot format: http://blogname.blogspot.com/feeds/posts/default?alt=rss
$feed->set_feed_url($feed_ary);

// limit the number of items
$feed->set_item_limit($max_items_per_feed);

// Run SimplePie.
$success = $feed->init();

$feed->handle_content_type();

它合并了Feed并按日期对它们进行排序,因为列出的所有内容都有日期字段。请注意,blogspot供稿的格式为:Blogspot格式:http://blogname.blogspot.com/feeds/posts/default?alt=rss,您可以在一些但不是所有的供稿网址中找到它。