0 votes

Obtenir le lien RSS à partir du <head> en Actionscript 2

J'ai des problèmes pour accéder au lien rss qui indique au navigateur où se trouve le rss pour le site. Le lien se trouve dans la section <head> de la balise html, voici un exemple de ce à quoi ressemble le lien.

<link rel="alternate" type="application/rss+xml" title="CNN - Top Stories [RSS]" href="http://rss.cnn.com/rss/cnn_topstories.rss" />

Mon approche initiale consistait à traiter le site comme un fichier XML et à examiner les balises, mais la plupart des sites ont un nombre arbitraire d'éléments de type <meta> les étiquettes qui oublient d'avoir une fin /> Ainsi, le <link> que je recherche devient un enfant d'une variable aléatoire <meta> étiquette.

Je pense maintenant à traiter le site comme une chaîne de caractères et à rechercher les éléments suivants <link> mais cela pose des problèmes car la balise <link> peut avoir ses attributs dans n'importe quel ordre. Bien sûr, je peux contourner ce problème, mais je préférerais quelque chose d'un peu plus propre que de chercher type="application/rss+xml" puis à gauche et à droite de celui-ci pour le premier href qu'il voit.

1voto

asperous.us Points 657

L'analyse HTML est difficile ! Même si vous trouvez une solution qui fonctionne pour un site, il est probable qu'elle ne fonctionnera pas dans un autre. Si vous pouvez trouver une bibliothèque pour vous aider, votre vie sera beaucoup plus facile.

Si vous ne trouvez pas d'analyseur html pour actionscript 2, peut-être pourriez-vous mettre en place un serveur script pour le faire pour vous ? Comme :

myXML.load("http://yourserver.com/cgi-bin/findrss?url=foo.com");

et qu'il renvoie l'url sous forme de xml

Si vous essayez cette approche, je vous recommande la bibliothèque python Une belle soupe . Je l'ai déjà utilisé et, à mon avis, il est extraordinaire. Il fonctionnera sur n'importe quel site web que vous lui donnerez, même si le balisage est horrible.

Il ressemblerait à quelque chose comme ceci :

#!/usr/bin/python
import cgi
import cgitb; cgitb.enable() # Optional; for debugging only
import urllib2
from BeautifulSoup import BeautifulSoup

def getRssFromUrl(url):
    try:
        Response = urllib2.urlopen(url)
    except Exception:
        print "<error>error getting url</error>"
        return []
    html = Response.read()
    soup = BeautifulSoup(html)
    rssFeeds = soup.findAll('link', attrs={"type" : "application/rss+xml"})
    return rssFeeds

print "Content-type: text/xml\n\n"
form = cgi.FieldStorage()
if form.has_key("url") is True:
    url = form["url"].value
else:
    url = ""
print "<xml>"
rssFeeds = getRssFromUrl(url)
for feed in rssFeeds:
    print ("<url>%s</url>" % feed["href"])
print "</xml>"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X