Объединение нескольких RSS-каналов с помощью fetch feed


Я использую fetch_feed для отображения rss-канала по теме, над которой я работаю.

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

Заранее спасибо! Джордж

 2
Author: George Wiscombe, 2011-01-25

1 answers

Технически вы можете передать несколько URL-адресов каналов в fetch_feed() в виде массива, и он захватит их все сразу. Но возврат - это полный беспорядок, и я лично не мог понять, как его разобрать.

Если никто другой не знает, как это сделать с помощью fetch_feed(), я могу предложить решение с использованием класса SimplePie (который fetch_feed фактически использует в любом случае). Класс SimplePie имеет несколько вспомогательных методов для анализа возвращаемых данных, и они довольно упрощают задачу.

Попробуй что-нибудь например:

// Contains the SimplePie class
require_once (ABSPATH . WPINC . '/class-feed.php');

// New class instance
$feed = new SimplePie();

// You feed URLs
$feed->set_feed_url(array('http://rss.cnn.com/rss/cnn_topstories.rss', 'http://cuteoverload.com/feed/'));

// Do it!
$feed->init();
$feed->handle_content_type();

// Loop the results
foreach($feed->get_items() as $item) {

    echo $item->get_title();
    echo '<hr/>';

}

Дополнительные методы SimplePie включают get_permalink() и get_description().

Единственным недостатком этого подхода является то, что SimplePie когда-либо будет выведен из WordPress в пользу другого класса, это сломается.

ОБНОВЛЕНИЕ

Как указал @Rarst в комментариях, вам не нужно напрямую обращаться к SimplePie. Вы можете использовать его методы для объекта, который возвращает функция fetch_feed(). Так что ответ намного проще, чем я думал:

$feed = fetch_feed(array('http://rss.cnn.com/rss/cnn_topstories.rss', 'http://cuteoverload.com/feed/'));

// Loop the results
foreach($feed->get_items() as $item) {

    echo $item->get_title();
    echo '<hr/>';

}
 4
Author: MathSmath, 2011-01-26 16:01:38