вторник, 16 ноября 2010 г.

Серверное приложение для считывания ленты RSS

Как известно, посылая запрос из браузера AJAXом невозможно выходить за пределы домена. Чтобы считать ленту RSS по произвольному адресу, понадобится серверный сценарий.

Задача сценария - по адресу сайта определить, имеется ли на сайте лента новостей и, если имеется, показать ее заголовки с гиперссылками на содержание.

Как узнать, имеется ли на сайте лента новостей?

Рассмотрим пример: http://newsru.com/



Открывая домашнюю страницу сайта, мы видим теги link, которые подключают RSS-каналы. Следовательно, сценарий должен прочитать страницу и поискать в ней теги link, у которых имеется атрибут type="application/rss+xml" и, при успешном обнаружении, прочитать значение атрибута href. Прочитав его, открыть адрес с помощью DOM и вывести список новостей.

<link rel="alternate" type="application/rss+xml" title="RSS / Самые главные новости" href="http://feeds.newsru.com/com/www/news/top" />
<link rel="alternate" type="application/rss+xml" title="RSS / Главные новости" href="http://feeds.newsru.com/com/www/news/big" />
<link rel="alternate" type="application/rss+xml" title="RSS / Важные новости" href="http://feeds.newsru.com/com/www/news/main" />
<link rel="alternate" type="application/rss+xml" title="RSS / Все новости" href="http://feeds.newsru.com/com/www/news/all" />



Поиск тега link (скажем, первого из встреченных) может быть осуществлен с помощью регулярного выражения.


<(link)(.*?)type="application\/rss\+xml"(.*?)>



Как загрузить эту страницу в РНР-сценарий?

$xml = new DOMDocument();
@$xml -> loadHTMLFile("http://lenta.ru");
$sample = $xml->saveHTML();

Как теперь считать этот канал в РНР-сценарий?

Очень просто - с помощью указанного выше регулярного выражения (или подобного) получить тег link; из него извлечь имя файла (RSS); и, наконец, загрузить его:

$xml -> load($rss);


Как вывести на экран результат?

Вывод на экран контента осуществите с помощью XSL

Комментариев нет:

Отправить комментарий

Ony this moment