1

过去几天我一直在使用 SimplePie 做很多工作,我注意到它并不总是以相同的方式对待 Blogger 提要。如果我像这样http://davetaylorminiatures.blogspot.com/http://sippinonpaintwater.blogspot.com/feeds/posts/default?alt=rss将Blogger 提要传递给 SimplePie ,它会显示得很好,但是当我将一组有效的提要传递给 SimplePie,其中一些来自 blogspot,一些不是来自 blogspot,则不会返回任何 blogspot 项目。如果我让它发现提要或传递指定 RSS 的提要似乎并不重要。

如果 Blogger 博客使用 FeedBurner 作为其提要,那么这将起作用,例如此示例http://feeds.feedburner.com/FromTheWarp SimplePie 将在合并提要中包含来自“From the Warp”的 blogspot 托管博客中的项目,其中的数据来自其他有效的提要。

我一直在进行大量的提要合并,起初我认为这与发布日期或本地提要缓存有关,但我已经炸毁了本地缓存文件并运行了许多测试。

一个 blogspot 提要适用于 SimplePie,传递一系列提要,并且 blogspot 提要似乎被忽略了,它们似乎也没有在本地缓存。既然我知道单个提要在提要阅读器甚至 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

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

合并 Feed 测试,不同的一组三个 Feed

合并的提要项目标题

刷子评论:Winsor Newton 系列 7 vs Rosemary and Co NMM 黄金制作快速简单 5th Chest of Colors Miniature Exchange 摘要 Warploque Miniatures:Jebzakkah B'Ork – 本月回顾微缩模型:2012 年 1 月字里行间 – 第 5 集金恶魔 2011: Clash of Slayer Sword 获奖者游戏研讨会:FineCast Jabberslythe – 回顾本月缩影:2011 年 12 月罗密欧模型:Jean Bart – 回顾

相同的合并提要项目和提要标题

画笔评论:Winsor Newton 系列 7 vs Rosemary and Co 来自提要:Chest of Colours - 所有关于微型画

NMM 黄金从提要中快速轻松地制作:色彩箱 - 所有关于微型绘画

第五届彩色微型画交换摘要来自提要:彩色胸部-关于微型绘画的一切

Warploque Miniatures: Jebzakkah B'Ork – 来自提要的评论:Chest of Colours - 所有关于微型画

本月缩影:2012 年 1 月 来自提要:Chest of Colours - 所有关于缩影

字里行间——第 5 集来自提要:色彩的宝箱——关于微型画的一切

Golden Demons 2011:Clash of Slayer Sword 获胜者来自提要:Chest of Colours - 所有关于微型画

游戏工作坊:FineCast Jabberslythe – 来自 feed 的评论:Chest of Colours - 所有关于微型画

本月缩影:2011 年 12 月 来自提要:Chest of Colours - 所有关于缩影

Romeo Models: Jean Bart – 来自 feed 的评论:Chest of Colours - 所有关于微型画

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

4

1 回答 1

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();

它合并提要并按日期对其进行排序,因为列出的所有提要都有日期字段。请注意,blogspot 提要的格式是: Blogspot 格式:http ://blogname.blogspot.com/feeds/posts/default?alt=rss ,您在某些但不是所有提要 URL 中都有。

于 2013-04-16T16:28:53.607 回答