首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

小弟我在linux下写了个perl读取rss文件的程序,(以CSDN和yahoo为例)

2012-03-27 
我在linux下写了个perl读取rss文件的程序,(以CSDN和yahoo为例)1首先是前期的准备编程环境:RedHatLinux9.0p

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

热点排行