我在所有这些中都是一个完整的菜鸟,但不久前我在Perl中编写了一个小脚本来解析RSS提要。它是这样开始的:
use strict;
use XML::RSS::Parser;
use Data::Dumper;
my $url = "http://www.livenation.co.uk/Venue/159/Southampton-Guildhall-tickets/RSS";
my $parser = XML::RSS::Parser->new();
my $feed = $parser->parse_uri($url);
print Dumper( $feed );
print $parser->errstr();
它曾经工作(记不起我上次检查它,但几周前它似乎工作),但今天它不再。 RSS源是活动的,并通过feedvalidator.org。 errstr()
会返回此信息:
End tag mismatch (title != description) [Ln: 67, Col: 95]
我不确定这是怎么发生的或这意味着什么。 RSS的来源如下:
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
我不知道之前是否有所不同。我尝试了一些其他的原子提要,解析器似乎打破了所有这些原子。问题是,sysadmin直到截止日期之后才回来,所以我必须使用可用的东西。
更新:
有趣。它打破了我的w7 64 * active perl)和ubuntu(32,9.10)安装。在我朋友的ubuntu上运行正常(同样,9.10)。我尝试重新安装模块,但这似乎没有改变任何东西。
答案 0 :(得分:1)
刚才适合我。也许RSS feed有一段时间坏了损坏的XML?该错误似乎指向所示行中的Feed中的未匹配标记。
如果仍然发生,请尝试使用curl(或类似)来显示原始XML并检查其是否有错误。
答案 1 :(得分:1)
我得到了相同的错误(相同的消息和行号)与全新安装的XML :: RSS :: Parser及其使用的模块(它只是XML :: Elemental上的feed结构的包装器,它使用要解析的XML :: SAX等。
但是,Firefox会指示该文件有效。XML :: Tiny似乎能够解析文件,因此只需要做一些工作就可以对其进行转换。
答案 2 :(得分:0)
你需要查看实际来源,看看发生了什么。不只是“在浏览器中访问网站”,而是查看程序看到的实际来源。谁知道发生了什么?某种故障,只有一半的文件被发送?发送不同的来源,因为它不是同一个客户端?
每次程序运行时我都会转储XML,并在出现错误时进行检查。