1

ここ数日、SimplePie を使って多くの作業を行ってきましたが、Blogger フィードが常に同じように処理されるとは限らないことに気付きました。http://davetaylorminiatures.blogspot.com/またはhttp://sippinonpaintwater.blogspot.com/feeds/posts/default?alt=rssのように SimplePie に Blogger フィードを渡すと、問題なく表示されますが、 blogspot からの有効なフィードと blogspot からではない有効なフィードの配列を SimplePie に渡すと、blogspot アイテムは返されません。フィードを検出するか、RSS を指定してフィードを渡すかは問題ではないようです。

Blogger ブログがそのフィードに FeedBurner を使用している場合、この例のように機能しますhttp://feeds.feedburner.com/FromTheWarp他の有効なフィード。

私は多くのフィードのマージを行ってきましたが、最初は公開日やフィードのローカル キャッシュに関係があると考えていましたが、ローカル キャッシュ ファイルを吹き飛ばして多くのテストを実行しました。

SimplePie には 1 つの blogspot フィードで問題ありません。フィードの配列を渡すと、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 の出力です:

Merged Feeds Test、異なる 3 つのフィードのセット

マージされたフィード アイテムのタイトル

ブラシ レビュー: Winsor Newton シリーズ 7 対 Rosemary and Co NMM ゴールドがすばやく簡単に作成 5th Chest of Colors ミニチュア交換のまとめClash of Slayer Sword 受賞者 ゲーム ワークショップ: FineCast Jabberslythe – レビュー 今月のミニチュア: 2011 年 12 月 Romeo モデル: Jean Bart – レビュー

同じ統合フィード アイテムとフィード タイトル

ブラシ レビュー: Winsor Newton シリーズ 7 対 Rosemary and Co フィードから: Chest of Colors - ミニチュア ペインティングのすべて

NMM ゴールドをすばやく簡単に作成 フィードから: チェスト オブ カラーズ - ミニチュア ペインティングのすべて

第5回 色のチェスト ミニチュア交換のまとめ フィードより: 色のチェスト - ミニチュア絵画のすべて

Warploque Miniatures: Jebzakkah B'Ork – フィードからのレビュー: Chest of Colors - ミニチュア ペインティングのすべて

今月のミニチュア: 2012 年 1 月 フィードから: チェスト オブ カラーズ - ミニチュア ペインティングのすべて

線の間 – エピソード 5 フィードから: 色の胸 - 細密画のすべて

Golden Demons 2011: Clash of Slayer Sword 受賞者 フィードから: Chest of Colors - ミニチュア ペインティングのすべて

ゲーム ワークショップ: FineCast Jabberslythe – フィードからのレビュー: Chest of Colors - ミニチュア ペインティングのすべて

今月のミニチュア: 2011 年 12 月 フィードから: Chest of Colors - ミニチュア ペインティングのすべて

ロメオ モデル: ジャン バート – フィードからのレビュー: 色の胸 - ミニチュア ペインティングのすべて

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 に答える