2010-03-14 4 views
0

Как получить точный путь feed.xml/rss.xml/atom.xml веб-сайта?Как узнать точный путь RSS XML-сайта?

Например, я поставил «http://www.example.com/news/today/this_is_a_news», но rss указывает на «http://www.example.com/rss/feed.xml», у большинства современных браузеров уже есть эти функции, и мне любопытно, как они их получили.

Можете ли вы привести пример кода в ruby, python или bash?

ответ

2

Нечто подобное в Ruby, будет работать ...

 
require 'rubygems' 
require 'nokogiri' 
require 'open-uri' 

html = Nokogiri::HTML(open('http://stackoverflow.com/questions/2441954/how-to-find-out-the-exact-rss-xml-path-of-a-website')) 
puts html.css('link[type="application/atom+xml"]').first.attr('href') 
# => "/feeds/question/2441954" 

Обратите внимание, что это абсолютный URL путь, который является законным, так что вы должны были бы предварять данные хоста.

Кроме того, «application/atom + xml» также может быть «application/rss + xml» или «application/rdf + xml», а несколько ссылок можно найти на странице, поэтому вам нужно будет решить, как обрабатывать кратные. Согласно документам автообнаружения, первый из них должен быть предпочтительным, но из опыта, который я видел в противном случае. Кроме того, согласно документам, ссылки не должны быть альтернативными типами данных (RSS и ATOM, указывающими на один и тот же контент), но должны быть разными, но, опять же, я видел, что это происходит.

+0

Для получения дополнительной информации о епархии автораспознавания ссылки: HTTP : //www.rssboard.org/rss-autodiscovery и http://philringnalda.com/rfc/draft-ietf-atompub-autodiscovery-01.html. –

1

Вы также можете использовать инструмент командной строки, как XMLStarlet (вместе с HTML Tidy):

# version 1 
curl -s http://stackoverflow.com/questions/2441954/how-to-find-out-the-exact-rss-xml-path-of-a-website | 
tidy -q -c -wrap 0 -numeric -asxml -utf8 --merge-divs yes --merge-spans yes 2>/dev/null | 
xmlstarlet sel -T -t -m "//*[local-name()='link']" --if "@type='application/atom+xml' or @type='application/rss+xml'" -m "@href" -v '.' -n 

# version 2 
curl -s http://stackoverflow.com/questions/2441954/how-to-find-out-the-exact-rss-xml-path-of-a-website | 
tidy -q -c -wrap 0 -numeric -asxml -utf8 --merge-divs yes --merge-spans yes 2>/dev/null | 
xmlstarlet sel -N x="http://www.w3.org/1999/xhtml" -T -t -m "//x:link[@type='application/atom+xml' or @type='application/rss+xml']" -v "@href" -n 
Смежные вопросы