过去几天我一直在使用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
答案 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,您可以在一些但不是所有的供稿网址中找到它。