Создание новостных лент (RSS, Atom) в Catalyst. Создание простого RSS-агрегатора

Как реализовать собственную новостную ленту в RSS и Atom форматах, на основе Catalyst. Как создать собственный RSS-агрегатор. Простые примеры кода, без комментариев. Работа с модулями XML::Feed и XML::Feed::Aggregator.

 

Реализация собственной RSS-ленты

RSS и Atom — семейство XML-форматов, предназначенных для описания лент новостей, анонсов статей, изменений в блогах и т.п. У каждого формата есть свои преимущества.

Ниже приведен пример реализации собственной новостной ленты, в RSS и Atom форматах.

/lib/app/Controller/Feed.pm

В реальном приложении данные для новостной ленты будут извлекаться из БД, но в данном примере данные просто размещены в хеше.

До сих пор мы создавали наше Catalyst-приложение, ориентируясь на работу с utf-кодировкой. Для того, чтобы данные в RSS-ленте выводились не в виде крокозябров, добавляем инструкцию "use utf8;". Разумеется, сам код тоже должен быть сохранен в UTF. Для RSS-ленты этого будет достаточно.

Генерация ленты в Atom-формате происходит с помощью модуля XML::Atom::Feed, который не очень дружен с utf. Для того, чтобы сгенерированные им данные, можно было прочитать, всю страничку перед публикацией обрабатываем с помощью decode: decode('utf8',$feed->as_xml) .

Запускаем сервер. Новостная лента в RSS-формате доступна по адресу: http://localhost:3000/rss

Лента в Atom-формате:
http://localhost:3000/atom

Пример сгенерированного кода для Atom:

Пример сгенерированного кода для RSS:

 

Реализация агрегатора для RSS-лент

RSS-агрегатор - это приложение для автоматического сбора сообщений из RSS-лент. Агрегатор получает список ссылок на RSS-ленты. Далее, самостоятельно по cron, или по запросу клиента, агрегатор проверяет источники на наличие обновлений, и формирует отчет для пользователя в удобном формате.

Ниже приведен пример реализации очень простого RSS-агрегатора. Задается список адресов. По запросу пользователя, все перечисленные адреса опрашиваются, данные сортируются и выводятся на отдельной страничке. Таким образом, клиенту нет необходимость просматривать все интересующие его блоги и сайты, достаточно загрузить одну страницу и увидеть все имеющиеся обновления.

Большинство соц.сетей работают как раз по принципу агрегатора. Пользователь подписывается на новости друзей и тематических сообществ, и всегда видит ленту отсортированных по дате сообщений.

/lib/app/Controller/FeedAggregator.pm :

/root/src/feeds.tt :

После запуска сервера можно обратиться по адресу http://localhost:3000/feeds и получить список всех последних сообщений с выбранных блогов.

Результат:

 

Полезные ссылки

search.cpan.org: XML::Feed

search.cpan.org: XML::Atom::Feed

search.cpan.org: XML::RSS

search.cpan.org: XML::Feed::Aggregator

search.cpan.org: XML::Feed::Entry