Как узнать точный путь RSS XML сайта? - PullRequest
0 голосов
/ 14 марта 2010

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

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

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

Ответы [ 3 ]

2 голосов
/ 15 марта 2010

Что-то вроде этого в Ruby будет работать ...

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

html = Nokogiri::HTML(open('/1785430/kak-uznat-tochnyi-put-rss-xml-saita'))
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, указывающие на один и тот же контент), но должны быть разным контентом, но, опять же, я видел, что это происходит.

1 голос
/ 16 марта 2011

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

# version 1
curl -s /1785430/kak-uznat-tochnyi-put-rss-xml-saita | 
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 /1785430/kak-uznat-tochnyi-put-rss-xml-saita | 
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
0 голосов
/ 06 октября 2013

В Python используйте это классическое решение: http://www.aaronsw.com/2002/feedfinder/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...