先让大家看看效果吧:
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  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
#邢晓宁版权所有,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代码。


最后一句废话,版权所有,转载请申明出处。

 

Logo

更多推荐