2010-03-14 6 views

Répondre

2

Quelque chose comme ça dans Ruby fonctionnera ...

 
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" 

avis qu'il est un chemin d'URL absolue, ce qui est légal et vous auriez besoin préfixer l'info hôte. En outre, "application/atom + xml" peut également être "application/rss + xml" ou "application/rdf + xml", et plusieurs liens peuvent être trouvés dans une page, vous devrez donc décider comment gérer des multiples. Selon les docs d'autodiscovery le premier présenté devrait être le préféré, mais de l'expérience j'ai vu autrement. En outre, selon les documents, les liens ne devraient pas être des types de données alternatifs (RSS et ATOM pointant vers le même contenu), mais devraient être différents, mais encore une fois, j'ai vu cela se produire.

+0

Pour plus d'informations sur le lien autodiscovery voir: http : //www.rssboard.org/rss-autodiscovery et http://philringnalda.com/rfc/draft-ietf-atompub-autodiscovery-01.html. –

1

Vous pouvez également utiliser un outil de ligne de commande comme xmlstarlet (avec HTML bien rangé):

# 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