Как обнаружить RSS-каналы для данного URL - PullRequest
20 голосов
/ 14 сентября 2008

Я получаю URL от пользователя. Мне нужно знать:
а) является ли URL действующим каналом RSS?
б) если нет, существует ли действительный фид, связанный с этим URL

с использованием PHP / Javascript или чего-то подобного

(напр. http://techcrunch.com терпит неудачу а), но б) возвращает свой канал RSS)

Редактировать: см. Мой ответ ниже

Ответы [ 6 ]

20 голосов
/ 14 сентября 2008

Нашел что-то, что я хотел:

Google AJAX Feed API имеет функцию загрузки и поиска (Docs здесь ).

a) Загрузка подачи обеспечивает подачу (и состояние подачи) в формате JSON

b) Поиск канала предоставляет RSS-канал для данного URL

Существует также функция поиска каналов, которая ищет RSS-каналы по ключевому слову.

Планирование использовать это с $ .getJSON

JQuery.
10 голосов
/ 15 сентября 2008

Класс Zend Feed Zend-framework может автоматически анализировать веб-страницу и перечислять доступные каналы.

Пример:

$feedArray = Zend_Feed::findFeeds('http://www.example.com/news.html');
6 голосов
/ 14 сентября 2008

Эта ссылка позволит вам проверить ссылку на соответствие спецификациям RSS / Atom, используя спецификации W3C, но для этого потребуется ввести URL-адрес вручную.

Есть несколько способов сделать это программно, в зависимости от вашего выбора языка - в PHP синтаксический анализ файла как допустимого XML - хороший способ начать, а затем сравнить его с соответствующий DTD .

Для b), если сама ссылка не является фидом, вы можете проанализировать ее и найти указанный фид в разделе страницы, ища ссылку, тип которой "application / rss + xml". ", например:

<link rel="alternate" title="RSS Feed" 
    href="http://www.example.com/rss-feed.xml" type="application/rss+xml" />

Этот тип ссылок используется большинством браузеров для "автоматического обнаружения" каналов (в результате чего в адресной строке появляется значок RSS)

5 голосов
/ 14 сентября 2008

а) Получить его и попытаться разобрать. Если вы можете разобрать его, он действителен.

b) Проверить, является ли это HTML-документом (сервер отправлен text/html) MIME-типа. Если это так, запустите его через анализатор HTML и найдите <link> элементы с отношениями RSS-канала.

4 голосов
/ 16 сентября 2008

Для Perl существует Feed :: Find , который автоматизирует обнаружение каналов синдикации с веб-страницы. Использование довольно упрощенно:

use Feed::Find;
my @feeds = Feed::Find->find('http://example.com/');

Сначала он пробует теги link, а затем сканирует теги a для файлов с именем .rss и тому подобного.

2 голосов
/ 14 сентября 2008

Вы делаете это на определенном языке или просто хотите узнать подробности о спецификации RSS?

В общем, ищите пролог XML:

<?xml version="1.0" encoding="UTF-8"?>

, за которым следует элемент , но вы можете захотеть проверить его как XML, полностью проверить его по DTD или убедиться, что, например, каждый указанный URL-адрес действителен и т. Д. Дополнительные сведения помогут. 1007 *

ОБНОВЛЕНИЕ : Ах - PHP. Я нашел эту библиотеку очень полезной: MagpieRSS

...