读书人

小弟我在linux下写了个perl读取rss文件

发布时间: 2012-03-27 13:44:24 作者: rapoo

我在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,看不懂。也看不到你说的那些效果

读书人网 >perl python

热点推荐