SimplePie и загрузка нескольких каналов с blogspot.com

В последние несколько дней я много работал с SimplePie и заметил, что он не всегда одинаково обрабатывает каналы Blogger. Если я передаю канал Blogger в SimplePie, например, http://davetaylorminiatures.blogspot.com/ или http://sippinonpaintwater.blogspot.com/feeds/posts/default?alt=rss он будет отображаться нормально, но когда я передать массив действительных каналов, некоторые из блогов, а некоторые не из блогов, в SimplePie, ни один из элементов блогов не возвращается. Кажется, это не имеет значения, если я позволю ему обнаружить канал или передать каналы, указывающие RSS.

Если блог Blogger использует, например, FeedBurner для своих каналов, это будет работать, например, в этом примере http://feeds.feedburner.com/FromTheWarp SimplePie будет включать элементы из "От деформации" блога, размещенного на блоге в объединенном фиде, с данными из другие действительные каналы.

Я много занимался слиянием каналов и сначала думал, что это как-то связано с датой публикации или локальным кэшированием каналов, но я удалил файлы локального кэша и провел много тестов.

Один канал блогов для блога подходит для SimplePie, пропускает массив каналов, и каналы блогов, похоже, игнорируются, они также не кэшируются локально. Поскольку я знаю, что отдельные каналы работают в программах чтения каналов и даже в демонстрационном коде 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 только сейчас:

Тест объединенных каналов, другой набор из трех каналов

Объединенные каналы Названия предметов

Обзор кистей: серия Winsor Newton 7 против золота розмарина и Co NMM стала быстрой и легкой 5-й сундук с красками Краткая информация об обмене Warploque Miniatures: Jebzakkah B'Ork - Обзорная миниатюра месяца: январь 2012 года между линиями - Эпизод 5 Золотые Демоны 2011: Clash of Slayer Sword победителей Игровой семинар: FineCast Jabberslythe - Обзор Миниатюра месяца: декабрь 2011 Ромео Модели: Жан Барт - Обзор

Одинаковые объединенные элементы и название канала

Обзор кистей: серия Winsor Newton 7 против Розмари и Ко. Из корма: Chest of Colours - все о миниатюрной живописи

НММ золото сделано быстро и легко Из корма: Сундук цветов - Все о миниатюрной живописи

Миниатюрный 5-й сундук с красками Краткий обзор Из корма: Сундук с красками

Миниатюры варплоков: Jebzakkah B'Ork - Обзор Из корма: Сундук цветов - Все о миниатюрной живописи

Миниатюра месяца: январь 2012 Из корма: Сундук цветов - Все о миниатюрной живописи

Между строк - Серия 5 Из корма: Сундук цветов - Все о миниатюрной живописи

Золотые демоны 2011: победители Clash of Slayer Sword Из корма: Сундук цветов - Все о миниатюрной живописи

Мастерская Игр: FineCast Jabberslythe - Обзор Из ленты: Сундук Цветов - Все о миниатюрной живописи

Миниатюра месяца: декабрь 2011 Из корма: Сундук цветов - Все о миниатюрной живописи

Ромео Модели: Жан Барт - Обзор Из корма: Сундук цветов - Все о миниатюрной живописи

Есть ли какие-либо идеи о том, что происходит, помимо очевидного, что, кажется, имеет значение, уже загружали ли вы и кэшировали ли канал Blogger по отдельности, прежде чем пытаться объединить его? Тестовый скрипт запущен и работает здесь

1 ответ

Решение

Я использую 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();

Он объединяет каналы и сортирует их по дате, поскольку все перечисленные имеют поле даты. Обратите внимание, что формат каналов блога: формат блога: http://blogname.blogspot.com/feeds/posts/default?alt=rss, который есть в некоторых, но не во всех URL-адресах каналов.

Другие вопросы по тегам