读取站点更新纪录(RSS2.0) - php篇 :新浪,雅虎新闻,csdn blog...

2024-02-16 20:50

本文主要是介绍读取站点更新纪录(RSS2.0) - php篇 :新浪,雅虎新闻,csdn blog...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文链接地址:http://blog.csdn.net/thefirstwind/archive/2007/01/18/1486536.aspx
作者:邢晓宁
时间:2007年1月18日
声明:版权没有,随你任转

[前言]
在个人建站的过程中,经常要从其他网站获取大量动态信息。 
本文所描述的就是使用php程序读取rss标准的xml格式文件,动态显示他人站点的信息列表。

[演示]

Yahoo News : perl php Perl/PHP XML::RSS读Yahoo新闻(英文)的例子
My CSDN Blog : perl php Perl/PHP XML::RSS读取个人CSDN博客的例子
JLinux : perl php Perl/PHP XML::RSS读取JLinux的例子
新浪新闻 综合 perl php 体育 perl php 娱乐 perl php

 

[前提]
对于php编程爱好者来说,前期的准备相对简单,只要有php4以上的环境就可以建立此功能。

[对应的XML/RSS文件的格式]
基本上很多网站提供的用来做rss浏览的文件都是以下的格式,这是符合xml的w3c通用标准的。
简单的分析一下,
基本的树结构是,
一个rss根下,有一个channel节点,
  该channel节点下的title,link,description属性是常用的,
     然后就是item节点,众多item节点是最近跟新的若干篇文章,
    该item节点下的title,link,pubDate,description属性是常用的。
   简单格式如下:

< rss  version ="2.0"  xmlns:dc ="http://purl.org/dc/elements/1.1/"  xmlns:trackback ="http://madskills.com/public/xml/rss/module/trackback/"  xmlns:wfw ="http://wellformedweb.org/CommentAPI/"  xmlns:slash ="http://purl.org/rss/1.0/modules/slash/" >
< channel >
< title > 本站点频道的标题 </ title >
< link > 链接地址 </ link >
< description > 站点频道描述信息 </ description >
< item >
< title > 文章1 </ title >
< link > 文章1链接地址 </ link >
< description > 文章1内容简介 </ description >
</ item >
< item >
< title > 文章2 </ title >
< link > 文章2链接地址 </ link >
< description > 文章2内容简介 </ description >
</ item >
</ channel >
</ rss >




举例:

< rss  version ="2.0"  xmlns:dc ="http://purl.org/dc/elements/1.1/"  xmlns:trackback ="http://madskills.com/public/xml/rss/module/trackback/"  xmlns:wfw ="http://wellformedweb.org/CommentAPI/"  xmlns:slash ="http://purl.org/rss/1.0/modules/slash/" >
< channel >
  
< title > 邢晓宁专栏 </ title >  
  
< link > http://blog.csdn.net/thefirstwind/ </ link >  
  
< description > 代码一生 </ description >  
  
< dc:language > af </ dc:language >  
  
< generator > .Text Version 1.0.1.1 </ generator >  
  
< image > http://counter.csdn.net/pv.aspx?id=72 </ image >  
< item >
  
< dc:creator > ♂猜猜♂(邢晓宁) </ dc:creator >  
  
< title > 在 MS Windows 下建立 DocBook 的解譯環境 </ title >  
  
< link > http://blog.csdn.net/thefirstwind/archive/2006/12/21/1451714.aspx </ link >  
  
< pubDate > Thu, 21 Dec 2006 13:50:00 GMT </ pubDate >  
  
< guid > http://blog.csdn.net/thefirstwind/archive/2006/12/21/1451714.aspx </ guid >  
  
< wfw:comment > http://blog.csdn.net/thefirstwind/comments/1451714.aspx </ wfw:comment >  
  
< comments > http://blog.csdn.net/thefirstwind/archive/2006/12/21/1451714.aspx#Feedback </ comments >  
  
< slash:comments > 0 </ slash:comments >  
  
< wfw:commentRss > http://blog.csdn.net/thefirstwind/comments/commentRss/1451714.aspx </ wfw:commentRss >  
  
< trackback:ping > http://tb.blog.csdn.net/TrackBack.aspx?PostId=1451714 </ trackback:ping >  
  
< description > 在 MS Windows 下建立 DocBook 的解譯環境 < img  src  ="http://blog.csdn.net/thefirstwind/aggbug/1451714.aspx"  width  = "1"  height  = "1"   /></ description >  
  
</ item >
< item >
  
< dc:creator > 邢晓宁 </ dc:creator >  
  
< title > 程序员学习的革命-如何使用大脑 </ title >  
  
< link > http://blog.csdn.net/thefirstwind/archive/2006/12/13/1440965.aspx </ link >  
  
< pubDate > Wed, 13 Dec 2006 09:41:00 GMT </ pubDate >  
  
< guid > http://blog.csdn.net/thefirstwind/archive/2006/12/13/1440965.aspx </ guid >  
  
< wfw:comment > http://blog.csdn.net/thefirstwind/comments/1440965.aspx </ wfw:comment >  
  
< comments > http://blog.csdn.net/thefirstwind/archive/2006/12/13/1440965.aspx#Feedback </ comments >  
  
< slash:comments > 27 </ slash:comments >  
  
< wfw:commentRss > http://blog.csdn.net/thefirstwind/comments/commentRss/1440965.aspx </ wfw:commentRss >  
  
< trackback:ping > http://tb.blog.csdn.net/TrackBack.aspx?PostId=1440965 </ trackback:ping >  
  
< description > 很多人搞技术,还有很多转行搞技术,搞了一段时间终于发现,自己不适合作技术,要我说其实就是用脑方式的问题。真的学会适当的用脑方式,编程编起来得心应手。 < img  src  ="http://blog.csdn.net/thefirstwind/aggbug/1440965.aspx"  width  = "1"  height  = "1"   /></ description >  
  
</ item >
  
</ channel >
  
</ rss >

 

[核心程序]

<? php

$RSSURL   =   " http://blog.csdn.net/thefirstwind/Rss.aspx " ;
$buff   =   "" ;
$fp   =   fopen ( $RSSURL , " r " );
while  (  ! feof ( $fp ) ) {
    
$buff   .=   fgets ( $fp , 4096 );
}
fclose ( $fp );

$parser   =   xml_parser_create ();
xml_parser_set_option ( $parser , XML_OPTION_SKIP_WHITE , 1 );
xml_parse_into_struct ( $parser , $buff , $values , $idx );
xml_parser_free ( $parser );

$in_item   =   0 ;
foreach  ( $values   as   $value ) {
    
$tag    =   $value [ " tag " ];
    
$type   =   $value [ " type " ];
    
$value   =   $value [ " value " ];

    
$tag   =   strtolower ( $tag );
    
if  ( $tag   ==   " item "   &&   $type   ==   " open " ) {
        
$in_item   =   1 ;
    } 
else   if  ( $tag   ==   " item "   &&   $type   ==   " close " ) {
        
echo   <<< EOM
$title
$link
$description
EOM;
        
$in_item   =   0 ;
    }
    
if  ( $in_item ) {
        
switch  ( $tag ) {
            
case   " title " :
                
$title   =   $value ;
                
break ;
            
case   " link " :
                
$link   =   $value ;
                
break ;
            
case   " description " :
                
$description   =   $value ;
                
break ;
        }
    }
}

?>

 

[配合上以上说明,完整的源代码如下]
以下附加了css样式。

<? php

# $RSSURL = "http://www3.asahi.com/rss/index.rdf";
#
$RSSURL = "http://rss.news.yahoo.com/rss/topstories";
$RSSURL   =   " http://blog.csdn.net/thefirstwind/Rss.aspx " ;
# $RSSURL = "http://jlinux.ddo.jp/bbs/rss.php?auth=0";
#
$RSSURL = "http://rss.sina.com.cn/news/marquee/ddt.xml";
#
$RSSURL = "http://rss.sina.com.cn/news/allnews/sports.xml";
#
$RSSURL = "http://rss.sina.com.cn/news/allnews/ent.xml";

$buff   =   "" ;
$fp   =   fopen ( $RSSURL , " r " );
while  (  ! feof ( $fp ) ) {
    
$buff   .=   fgets ( $fp , 4096 );
}
fclose ( $fp );

$parser   =   xml_parser_create ();
xml_parser_set_option ( $parser , XML_OPTION_SKIP_WHITE , 1 );
xml_parse_into_struct ( $parser , $buff , $values , $idx );
xml_parser_free ( $parser );
$channel_title   =   $values [ 2 ][ " value " ];
echo   <<< __HTML__
< html >
< head >
< meta http - equiv = ' content-type '  content = ' text/html; charset=UTF-8 ' >
< title > $channel_title </ title >
< link rel = ' stylesheet '  type = ' text/css '  id = ' css '  href = ' /bbs/forumdata/cache/style_1.css ' >
< script type = ' text/javascript '  src = ' /bbs/include/common.js ' ></ script >
< script type = ' text/javascript '  src = ' /bbs/include/menu.js ' ></ script >
</ head >
< body >

< table border = ' 1 ' >
< tr >< td >
< img src = ' http://www.csdn.net/Images/logo_csdn.gif ' >& nbsp; & nbsp;
<!--
< img src = ' http://us.i1.yimg.com/us.yimg.com/i/us/nt/ma/ma_nws_1.gif ' >& nbsp; & nbsp;
< img src = ' http://jlinux.ddo.jp/bbs/images/default/logo.gif ' >& nbsp; & nbsp;
< img src = ' http://image2.sina.com.cn/dy/sina_news626.gif ' >& nbsp; & nbsp;
// -->
</ td >
< td >
$channel_title
$channel_lastBuildDate < br >
</ td >
</ td >
__HTML__;

$in_item   =   0 ;
foreach  ( $values   as   $value ) {
    
$tag    =   $value [ " tag " ];
    
$type   =   $value [ " type " ];
    
$value   =   $value [ " value " ];

    
$tag   =   strtolower ( $tag );
    
if  ( $tag   ==   " item "   &&   $type   ==   " open " ) {
        
$in_item   =   1 ;
    } 
else   if  ( $tag   ==   " item "   &&   $type   ==   " close " ) {
        
echo   <<< EOM
< tr >
  
< td colspan = ' 2 '   class = ' header ' width = ' 400 ' >
    
< a href = " $link " > $title </ a >
  
</ td >
</ tr >
< tr >
  
< td colspan = ' 2 '  width = ' 400 ' align = ' right ' >
    
$pubDate
  
</ td >
</ tr >
< tr >
  
< td colspan = ' 2 '  width = ' 400 ' >
    
$description
  
</ td >
</ tr >
< tr >
  
< td >
    
& nbsp;
  
</ td >
</ tr >
EOM;
        
$in_item   =   0 ;
    }
    
if  ( $in_item ) {
        
switch  ( $tag ) {
            
case   " title " :
                
$title   =   $value ;
                
break ;
            
case   " link " :
                
$link   =   $value ;
                
break ;
            
case   " pubDate " :
                
$pubDate   =   $value ;
                
break ;
            
case   " description " :
                
$description   =   $value ;
                
break ;
        }
    }
}

echo   <<<  __HTMLEND__
</ table >
</ body >
</ html >
__HTMLEND__;

?>
                        

这篇关于读取站点更新纪录(RSS2.0) - php篇 :新浪,雅虎新闻,csdn blog...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/715672

相关文章

SpringBoot使用Apache POI库读取Excel文件的操作详解

《SpringBoot使用ApachePOI库读取Excel文件的操作详解》在日常开发中,我们经常需要处理Excel文件中的数据,无论是从数据库导入数据、处理数据报表,还是批量生成数据,都可能会遇到... 目录项目背景依赖导入读取Excel模板的实现代码实现代码解析ExcelDemoInfoDTO 数据传输

Ubuntu 24.04 LTS怎么关闭 Ubuntu Pro 更新提示弹窗?

《Ubuntu24.04LTS怎么关闭UbuntuPro更新提示弹窗?》Ubuntu每次开机都会弹窗提示安全更新,设置里最多只能取消自动下载,自动更新,但无法做到直接让自动更新的弹窗不出现,... 如果你正在使用 Ubuntu 24.04 LTS,可能会注意到——在使用「软件更新器」或运行 APT 命令时,

Python读取TIF文件的两种方法实现

《Python读取TIF文件的两种方法实现》本文主要介绍了Python读取TIF文件的两种方法实现,包括使用tifffile库和Pillow库逐帧读取TIFF文件,具有一定的参考价值,感兴趣的可以了解... 目录方法 1:使用 tifffile 逐帧读取安装 tifffile:逐帧读取代码:方法 2:使用

PHP执行php.exe -v命令报错的解决方案

《PHP执行php.exe-v命令报错的解决方案》:本文主要介绍PHP执行php.exe-v命令报错的解决方案,文中通过图文讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下... 目录执行phpandroid.exe -v命令报错解决方案执行php.exe -v命令报错-PHP War

poj3468(线段树成段更新模板题)

题意:包括两个操作:1、将[a.b]上的数字加上v;2、查询区间[a,b]上的和 下面的介绍是下解题思路: 首先介绍  lazy-tag思想:用一个变量记录每一个线段树节点的变化值,当这部分线段的一致性被破坏我们就将这个变化值传递给子区间,大大增加了线段树的效率。 比如现在需要对[a,b]区间值进行加c操作,那么就从根节点[1,n]开始调用update函数进行操作,如果刚好执行到一个子节点,

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in

hdu1689(线段树成段更新)

两种操作:1、set区间[a,b]上数字为v;2、查询[ 1 , n ]上的sum 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdl

hdu 1754 I Hate It(线段树,单点更新,区间最值)

题意是求一个线段中的最大数。 线段树的模板题,试用了一下交大的模板。效率有点略低。 代码: #include <stdio.h>#include <string.h>#define TREE_SIZE (1 << (20))//const int TREE_SIZE = 200000 + 10;int max(int a, int b){return a > b ? a :

AI行业应用(不定期更新)

ChatPDF 可以让你上传一个 PDF 文件,然后针对这个 PDF 进行小结和提问。你可以把各种各样你要研究的分析报告交给它,快速获取到想要知道的信息。https://www.chatpdf.com/

GIS图形库更新2024.8.4-9.9

更多精彩内容请访问 dt.sim3d.cn ,关注公众号【sky的数孪技术】,技术交流、源码下载请添加微信:digital_twin123 Cesium 本期发布了1.121 版本。重大新闻,Cesium被Bentley收购。 ✨ 功能和改进 默认启用 MSAA,采样 4 次。若要关闭 MSAA,则可以设置scene.msaaSamples = 1。但是通过比较,发现并没有多大改善。