Как найти RSS-каналы по заданному URL
Вопрос
Я получаю URL-адрес от пользователя.Мне нужно знать:
а) является ли URL-адрес допустимым RSS-каналом?
б) если нет, то существует ли действительный канал, связанный с этим URL
использование PHP / Javascript или чего-то подобного
(Напр. http://techcrunch.com сбой a), но b) вернул бы их RSS-канал)
Редактировать:Видишь мой ответ ниже
Решение
Нашел то, что мне было нужно:
Google's API канала AJAX имеет функцию загрузки ленты и поиска ленты (Docs здесь).
а) Подача нагрузки предоставляет канал (и статус канала) в формате JSON
б) Поисковая лента предоставляет RSS-канал для заданного URL-адреса
Существует также функция поиска канала, которая выполняет поиск RSS-каналов по ключевому слову.
Планирую использовать это с $.getJSON от jQuery
Другие советы
Тот Самый Класс подачи Zend из числа Zend-фреймворк может автоматически анализировать веб-страницу и составлять список доступных каналов.
Пример:
$feedArray = Zend_Feed::findFeeds('http://www.example.com/news.html');
Эта ссылка это позволит вам проверить ссылку на соответствие спецификациям RSS / Atom, используя спецификации W3C, но потребует от вас ручного ввода URL.
Существует несколько способов сделать это программно, в зависимости от выбранного вами языка - в PHP, разбирая файл как допустимый XML это хороший способ начать, а затем сравнить его с соответствующий DTD.
Для b), если сама ссылка не является каналом, вы можете проанализировать ее и найти указанный канал в <head> раздел страницы, ищущий ссылку типа "application / rss + xml", например:
<link rel="alternate" title="RSS Feed"
href="http://www.example.com/rss-feed.xml" type="application/rss+xml" />
Этот тип ссылок используется большинством браузеров для "автоматического обнаружения" каналов (в результате чего в вашей адресной строке появляется значок RSS).
а) Извлеките его и попытайтесь разобрать.Если вы можете разобрать его, значит, он действителен.
б) Проверьте, является ли это HTML-документом (отправленным сервером text/html
) MIME-тип.Если это так, запустите его через анализатор HTML и найдите <link>
элементы со связями между RSS-каналами.
Для Perl существует Канал::Найти , который автоматизирует обнаружение каналов синдикации с веб-страницы.Это использование довольно упрощенное:
use Feed::Find;
my @feeds = Feed::Find->find('http://example.com/');
Сначала он пробует link
помечает, а затем сканирует a
теги для файлов с именами .rss
и что-то в этом роде.
Вы делаете это на определенном языке, или вам просто нужны подробности о спецификации RSS?
В общем, ищите XML-пролог:
<?xml version="1.0" encoding="UTF-8"?>
за ним следует элемент <rss> , но вы можете захотеть проверить его как XML, полностью проверить его на соответствие DTD или убедиться, что - например, каждый URL, на который ссылаются, является допустимым и т.д.Более подробная информация помогла бы.
Обновить:Ах, PHP.Я нахожу эту библиотеку довольно полезной: Сорокапятки