Я получаю URL-адрес от пользователя. Мне нужно знать:
a) является ли URL-адрес действительным RSS-каналом?
б) если нет, то есть правильный канал, связанный с этим URL-адресом
используя PHP / Javascript или что-то подобное
(Например, http://techcrunch.com не работает), но b) вернет свой RSS-канал)
Изменить: см. Мой ответ ниже
Нашел то, что хотел:
API API AJAX от Google имеет функцию загрузки и поиска (Docs здесь ).
a) Загрузочная подача обеспечивает подачу (и состояние подачи) в JSON
b) Канал поиска предоставляет канал RSS для заданного URL-адреса
Theres также функция поиска, которая ищет RSS-каналы на основе ключевого слова.
Планирование использования этого с помощью $ .getJSON JQuery
Класс Zend Feed Zend-framework может автоматически анализировать веб-страницу и перечислять доступные каналы.
Пример:
$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 появится в адресной строке)
a) Извлеките его и попробуйте разобрать его. Если вы можете его разобрать, это действительно так.
b) Проверьте, является ли это HTML-документ (сервер отправил text/html
) MIME-тип. Если это так, запустите его через парсер HTML и найдите элементы <link>
с отношениями RSS-каналов.
Для Perl существует Feed :: Find , который автоматически автоматизирует обнаружение фидов синдикации с веб-страницы. Использование довольно простое:
use Feed::Find; my @feeds = Feed::Find->find('http://example.com/');
Сначала он пробует теги link
и затем сканирует теги для файлов с именем .rss
и что-то в этом роде.
Вы делаете это на определенном языке, или вам просто нужны подробности о спецификации RSS?
В общем, ищите пролог XML:
<?xml version="1.0" encoding="UTF-8"?>
за которым следует элемент <rss>, но вы можете проверить его как XML, полностью проверить его на DTD или проверить, что, например, каждый URL-адрес является действительным и т. д. Более подробная информация поможет.
ОБНОВЛЕНИЕ : Ах – PHP. Я нашел эту библиотеку довольно полезной: MagpieRSS