SimplePie и получение нескольких каналов с blogspot.com - PullRequest
1 голос
/ 09 марта 2012

В последние несколько дней я много работал с 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 будет включать элементы из блога «From the Warp», размещенного на блоге в объединенном фиде, с данными из других действительных фидов.

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

Один канал блогов подходит для 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 против розмарина и золота NMM, сделанных быстро и легко 5-й сундук красок Миниатюра с обменом Сводка миниатюр Warploque: Jebzakkah B'Ork - Обзорная миниатюра месяца: январь 2012 Между линиями - Эпизод 5 Золотые Демоны 2011: Победители Clash of Slayer SwordМастерская Игр: FineCast Jabberslythe - Обзор Миниатюра месяца: декабрь 2011 Ромео Модели: Жан Барт - Обзор

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

Обзор кистей: Уинзор Ньютон, серия 7 против Розмари иCo Из корма: Сундук цветов - Все о миниатюрной живописи

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

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

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

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

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

Золотые Демоны 2011: Победители Битвы Убийц Мечей Из корма: Сундук цветов - Все о миниатюрной живописи

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

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

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

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

1 Ответ

0 голосов
/ 16 апреля 2013

Я использую 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: http://blogname.blogspot.com/feeds/posts/default?alt=rss,, который имеется в некоторых, но не во всех URL-адресах каналов.

...