Linux下perl编程读取rss文件(以CSDN和yahoo为例)
先让大家看看效果吧:yahoo news : http://thefirstwind.ddo.jp/~devuser/cgi-bin/yahoonews.plcsdn personal blog : http://thefirstwind.ddo.jp/~devuser/cgi-bin/csdnblog_thefirstwind.pl1 首先是前期的准备 编程环境: RedHat Lin
先让大家看看效果吧:
yahoo news : http://thefirstwind.ddo.jp/~devuser/cgi-bin/yahoonews.pl
csdn personal blog : http://thefirstwind.ddo.jp/~devuser/cgi-bin/csdnblog_thefirstwind.pl
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 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 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 代码实例
好了说了那么多废话,终于要看看代码了。
#邢晓宁版权所有,thefirstwind.ddo.jp,转载请声明出处
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 " ;
关于代码下载去
http://thefirstwind.ddo.jp/~devuser/cgi-bin/
rss文件是源rss的拷贝生成版本。
pl是执行代码。
txt是用来在web上显示的pl代码。
最后一句废话,版权所有,转载请申明出处。
更多推荐
所有评论(0)