从Actionscript 2中获取RSS链接

时间:2009-07-13 15:12:34

标签: html rss actionscript-2

我在访问rss链接时遇到问题,该链接告诉浏览器rss用于站点的位置。该链接位于html的<head>标记中,这是链接的示例。

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

我最初的方法是将网站视为XML文件并查看标记,但大多数网站都有任意数量的<meta>标记,但忘记了结尾/>,因此{{ 1}}标签我正在寻找成为随机<link>标签的孩子。

现在我正在考虑将网站视为字符串并在其中查找<meta>标记,但这会导致问题,因为<link>标记可以按任何顺序使其属性成为可能。当然我可以解决这个问题,但是我希望有点整洁而不是寻找<link>,然后在它看到的第一个type="application/rss+xml"左右看它。

1 个答案:

答案 0 :(得分:1)

HTML解析很难!即使您找到适用于一个站点的解决方案,它也可能会破坏另一个站点。如果你能找到一个图书馆来帮助你,你的生活将变得更加轻松。

如果你找不到动作脚本2的html解析器,也许你可以为它设置一个服务器脚本?像:

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

然后让它将url作为xml

返回

如果您尝试这种方法,我建议使用python库Beautiful Soup。我以前用过它,在我看来,它太棒了。无论标记多么可怕,它都适用于您提供的任何网站。

它看起来像这样:

#!/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>"