我在linux下写了个perl读取rss文件的程序,(以CSDN和yahoo为例)
1 首先是前期的准备
编程环境: RedHat Linux 9.0 perl v5.8.8
软件包: LWP::Simple ,use XML::RSS;
为了配好适合的软件环境,可是花了一番的功夫,
因为redhat linux 9.0 默认的perl版本下,安装以上的module总是不成功,
最后仔细琢磨了一番,终于安装好了两个必要的module.大体步骤如下:
1.1安装perl5.8.8
#wget http://search.cpan.org/CPAN/authors/id/N/NW/NWCLARK/perl-5.8.8.tar.gz
#tar -zxvf perl-5.8.8.tar.gz
然后进入perl-5.8.8的目录,去读INSTALL,安装好新的perl
1.2安装必要的module
#perl -MCPAN -e shell
初始化配置参考http://www.omakase.org/perl_module.htm
常用module安装(可选)
cpan> install XML::XPath
cpan> install SOAP::Lite
cpan> install Jcode
cpan> install DB_File
cpan> install DBI
cpan> install DBD::mysql
cpan> install Bundle::LWP
cpan> install Bundle::CPAN
cpan> install CGI
cpan> install HTML::Entities
cpan> install Mail::Internet
cpan> install Pod::Text
cpan> install Bundle::XML
虽然可能在这里面的操作中,会出现error但是,毕竟装了不少,对以后安装会有好处的。
本功能必备安装(如果上面常用安装已经执行过了,这一步,只是起到确认左右)
cpan> install XML::RSS
从新挂载cpan服务
cpan> reload cpan
2. 相关rss文件 和 perl 相关model 简单介绍
2.1 rss文件
在这里就是简单的介绍一下主要的几条语言,首先是要了解,几个常用的大网站提供的rss的结构,
我就不多说了,自己看看就可以了,如果对于XML文档结构不是很了解,去w3c school补补课吧。
这里仅仅给出相关的几个rss文件的地址,提供下载研究:
yahoo news : http://rss.news.yahoo.com/rss/topstories (经测试,本代码中应用成功)
csdn personal blog : http://blog.csdn.net/thefirstwind/Rss.aspx (经测试,本代码中应用成功)
2.2 LWP::Simple 和 XML::RSS 组合模块代码1
use LWP::Simple;
use XML::RSS;
my $url = 'http://blog.csdn.net/thefirstwind/Rss.aspx ';
my $data_from_web = get($url);
my $rss = new XML::RSS;
$rss-> parse($data_from_web);
2.3LWP::Simple 和 XML::RSS 组合模块代码2
use LWP::Simple;
use XML::RSS;
my $url = 'http://blog.csdn.net/thefirstwind/Rss.aspx ';
my $file = './csdnblog_thefirstwind.rss ';
mirror($url, $file);
my $rss = new XML::RSS;
$rss-> parsefile($file);
以上两种方法都可以,从现在开始$rss存有rss/xml文件的所有信息了,以后对其下面的节点,直接-> { '节点名 '},
如此引用就可以了。
3 代码实例
好了说了那么多废话,终于要看看代码了。
#!/usr/local/bin/perl
#
use strict;
use LWP::Simple;
use XML::RSS;
&html_top;
&html_body;
&html_end;
exit;
sub html_top{
printf "Content-type: text/html ";
printf " <!DOCTYPE HTML PUBLIC -//IETF//DTD HTML//EN> ";
printf < <___HTML_TOP;
<html>
<head>
<meta http-equiv= "content-type " content= "text/html; charset=UTF-8 ">
<title> cgi.test </title>
</head>
<body>
___HTML_TOP
}
sub html_end {
printf < <___HTML_END;
</body>
</html>
___HTML_END
}
sub html_body {
&call_readRss();
}
sub call_readRss {
# my $url = 'http://blog.csdn.net/thefirstwind/Rss.aspx ';
my $url = 'http://rss.news.yahoo.com/rss/topstories ';
my $file = './yahoonews.rss ';
mirror($url, $file);
my $rss = new XML::RSS;
$rss-> parsefile($file);
my $version = $rss-> { 'version '};
my $channel = $rss-> { 'channel '};
my $channel_title = $rss-> { 'channel '}-> { 'title '};
my $channel_copyright = $rss-> { 'channel '}-> { 'copyright '};
my $channel_link = $rss-> { 'channel '}-> { 'link '};
my $channel_description = $rss-> { 'channel '}-> { 'description '};
my $channel_language = $rss-> { 'channel '}-> { 'language '};
my $channel_lastBuildDate = $rss-> { 'channel '}-> { 'lastBuildDate '};
my $channel_ttl = $rss-> { 'channel '}-> { 'ttl '};
my $image = $rss-> { 'image '};
my $image_title = $rss-> { 'image '}-> { 'title '};
my $image_width = $rss-> { 'image '}-> { 'width '};
my $image_height = $rss-> { 'image '}-> { 'height '};
my $image_link = $rss-> { 'image '}-> { 'link '};
my $image_url = $rss-> { 'image '}-> { 'url '};
my $items_list = $rss-> { 'items '};
print " <a href= "$channel_link " > <image border=0 src= "$image_url " title= "$channel_title "/> </a> _fcksavedurl= " "$image_url " title= "$channel_title "/> </a> " _fcksavedurl= " "$image_url " title= "$channel_title "/> </a> " _fcksavedurl= " "$image_url " title= "$channel_title "/> </a> " ";
print $channel_lastBuildDate, " <br> ";
print " <hr> ";
print " <table> ";
foreach my $item_hash (@$items_list){
print " <tr> ";
print " <th> ";
print " <a href= "$$item_hash{ 'link '} "> $$item_hash{ 'title '} </a> ";
print " </th> ";
print " <td> ";
print $$item_hash{ 'pubDate '}, " <br> ";
print " </td> ";
print " </tr> <tr> ";
# print $$item_hash{ 'link '}, " <br> ";
print " <td colspan= 2 > ";
print $$item_hash{ 'description '}, " <br> ";
print " </td> ";
print " </tr> ";
print " <tr> </tr> ";
}
print " </table> ";
print " <hr> $channel_copyright ";
rss文件是源rss的拷贝生成版本。
pl是执行代码。
txt是用来在web上显示的pl代码。
[解决办法]
支持原创!
不过楼主能不能说下这些代码是干啥的?可以读用RSS发布的新闻?
[解决办法]
没学过rss,看不懂。也看不到你说的那些效果