我正在努力从在线新闻报道中获取RSS提要中的特殊术语。我正在使用XML :: RSS :: Parser和LWP :: UserAgent进行URL下载。我无法让它工作,即使我实际使用来自cpan的复制粘贴:http://search.cpan.org/~tima/XML-RSS-Parser-1.02/Parser.pm# $ feed-%3Erss_namespace_uri。我总是得到相同的错误:“无法在GetRss.pl第25行的未定义值上调用方法”rss_namespace_uri“。我已经尝试了一切......我遇到了与LWP :: Simple和XML :: RSS :: Parser相同的问题,我使用FileHandle管理它,但知道我想从多个站点获取源,保存在阵列。 这是我的代码:
#!/usr/bin/perl -w
use strict;
use XML::RSS::Parser;
use URI;
use LWP::UserAgent;
use Data::Dumper;
my $ua = LWP::UserAgent->new;
$ua->agent('XML::RSS::Parser Test Script');
my @places=( 'http://www.timaoutloud.org/xml/index.rdf' );
my $p = new XML::RSS::Parser;
foreach my $place ( @places ) {
# retreive feed
my $url=URI->new($place);
my $req=HTTP::Request->new;
$req->method('GET');
$req->uri($url);
my $feed = $p->parse($ua->request($req)->content);
# output some values
my $title = XML::RSS::Parser->ns_qualify('title',$feed->rss_namespace_uri);
print $feed->channel->type.": ".$feed->channel->element($title)->value."\n";
print "item count: ".$feed->item_count()."\n";
foreach my $i ( @{ $feed->items } ) {
foreach ( keys %{ $i->element } ) {
print $_.": ".$i->element($_)->value."\n";
}
print "\n";
}
# data dump of the feed to screen.
my $d = Data::Dumper->new([ $feed ]);
print $d->Dump."\n\n";
}
谢谢
答案 0 :(得分:0)
当您访问互联网上的资源时,此访问可能会失败。做错误管理:
my $response = $ua->get('http://search.cpan.org/');
if ($response->is_success) {
print $response->decoded_content; # or whatever
} else {
die $response->status_line;
}
- 从LWP::UserAgent
documentation
请注意使用decoded_content
,这样会更好。另请注意,没有为简单GET
构建手动请求。您需要将print
替换为您的解析代码。
当我尝试访问您使用浏览器提供的网址时,我已超时。
您还可以查看$p->parse
返回的内容实际上是否正常:
die "Couldn't parse feed" unless $feed;
此外,use warnings
。