2009-07-13 4 views
0

Je rencontre des problèmes pour accéder au lien rss qui indique au navigateur l'emplacement du rss pour le site. Le lien se trouve dans la balise <head> du code HTML Voici un exemple de ce à quoi ressemble le lien.Obtenir le lien RSS du <head> dans Actionscript 2

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

Mon approche originale était de traiter le site comme un fichier XML et regarder à travers les balises, mais la plupart des sites ont un nombre arbitraire de <meta> balises qui oublient d'avoir une fin /> si l'étiquette <link> Je suis à la recherche pour devient un enfant d'un tag aléatoire <meta>.

Maintenant, je pense à traiter le site comme une chaîne de caractères et à y rechercher la balise <link>, mais cela pose problème 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 regarder à gauche et à droite pour le premier href qu'il voit.

Répondre

1

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

Si vous ne pouvez pas trouver un analyseur html pour actionscript 2, peut-être pourriez-vous mettre en place un script serveur pour vous? Comme:

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

, puis l'ont renvoyer l'URL comme xml

Si vous essayez cette approche, je recommande la bibliothèque python Beautiful Soup. Je l'ai déjà utilisé et, à mon avis, c'est incroyable. Il fonctionnera sur n'importe quel site Web que vous lui donnez, peu importe à quel point 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>" 
+0

Malheureusement, je ne peux pas mettre en place un script serveur pour le faire pour moi, mais je vous remercie pour la bonne réponse: D – Anton