你现在使用什么工具订阅RSS的呢?google reader ? 鲜果?还是有道?有没有想过在自己的博客上增加这样一个阅读功能呢?把你订阅的RSS和大家一起分享?
如果你看了我的“超级链接”,就应该这样一个功能是很容易实现的(太复杂的东西DDBug可不会),只是我的这个“超级链接”只显示了最新的一篇文章标题,如果想显示多篇文章也是可以实现的。下面就说一说这个超级链接实现的方法,稍微扩展一下,就可以成为你的RSS阅读器。
原理
原理说起来很简单,用php对xml文件进行解析(RSS生成的就是固定格式的xml文件),这里不打算对xml文件进行解说,有兴趣的可以参考相关资料。但是如果用基本的php语句实现解析xml文件也未免有些小复杂,这个时候,就显出开源的力量了。
目前比较流行而且效率比较高的用php实现的解析RSS库有MagpieRSS 和 SimplePie 。最初我就是使用SimplePie这个库,但是后来感觉wordpress里应该带有RSS解析的功能,于是又开始阅读wordpress的源代码,终于在rss.php这个文件中找到了相关的操作。
fetch_rss、wp_rss、get_rss
原来wordpress在wp-includes\rss.php文件中已经封装了MagpieRSS(我目前使用的是wordpress2.8.6版本,不知道2.9有没有改动,过两天把2.9下载下来分析一下),又在原始的MagpieRSS上作了一些改动,比如把获取的RSS缓存到数据库中。
fetch_rss根据传递进来的feed地址返回一个MagpieRSS对象。这个函数使用起来是最灵活的。
wp_rss和get_rss的原型分别如下:
wp_rss( $url, $num_items = -1 ) 和 get_rss ($url, $num_items = 5)
这两个函数都是调用了fetch_rss,$num_items决定显示的文章数量,wp_rss函数默认显示所有输出的文章,get_rss默认显示最新的5篇文章。这两个函数使用起来虽然方便,但是太死板,不能按照自己的方式进行输出。
实现方法
在使用上面的三个函数之前,需要先把rss.php这个文件包括进来,不然会调用失败
require_once (ABSPATH . WPINC . '/rss.php');
以显示本站的rss为例,比如显示最新的2篇文章,代码如下:
require_once (ABSPATH . WPINC . '/rss.php');
wp_rss('http://domety.com/feed/',2);
就这么两行代码即可,简单否?下面将通过“超级链接”的实现过程详细解说一下fetch_rss的使用方法。
实例
使用wordpress现有的链接表,为了区分其它链接和方便管理,我新建了一个“超级链接”的链接分类(分类ID为53),然后在添加链接的时候除了网站标题和网站地址外,再把feed地址添加进去。在主题文件夹下新建一个page-superlinks.php,该文件为页面模板,内容如下:
<?php
/*
Template Name: Page Super Links
*/
get_header();
require_once (ABSPATH . WPINC . '/rss.php');
?>
<ul id="superlinks">
<?php
$bookmarks = get_bookmarks('category=53');
foreach($bookmarks as $bookmark) {
$url = $bookmark->link_rss;
if ( $rss = fetch_rss( $url ) ) {
$item = (array) $rss->items[0];
?>
<li><div style="background:url(<?php echo $bookmark->link_url.'favicon.ico'; ?>) no-repeat left center"><span><a href="<?php echo $bookmark->link_rss; ?>" title="订阅<?php echo $rss->channel['title']; ?>">RSS</a></span><strong><a href="<?php echo $rss->channel['link']; ?>" title="访问<?php echo $rss->channel['title']; ?>"><?php echo $rss->channel['title']; ?></a></strong><br /><small><?php echo $rss->channel['description']; ?></small></div>最新文章: <a href="<?php echo $item['link']; ?>" title="阅读原文: <?php echo $item['title']; ?>"><?php echo $item['title']; ?></a></li>
<?php }} ?>
</ul>
<div></div>
<?php
get_footer();
?>
然后再添加一个页面,标题为“超级链接”,页面模板选择刚才新建的Page Super Links。这样就大功告成了,去添加你的相关链接就行了。
代码中首先调用了get_bookmarks(‘category=53′)来获取“超级链接”下的所有链接,然后通过foreach循环对每个链接进行相应的处理,其中就包括了对feed地址的解析,再得到解析后的第一篇文章
if ( $rss = fetch_rss( $url ) ) {
$item = (array) $rss->items[0];
扩展
本例的“超级链接”只显示了每个链接的最新一篇文章
$item = (array) $rss->items[0];
以下是显示5篇文章的例子,并对常用的参数作了说明
$rss = fetch_rss($url);
if ( $rss ) {
$rss->items = array_slice($rss->items, 0, 5);
foreach ( (array) $rss->items as $item ) {
echo $item['title']; //文章标题
echo $item['link']; // 文章原文链接
echo $item['pubDate'];//文章发布日期
echo $item['description']; //文章摘要
}
}
另外还可以显示的内容有
- author——文章的作者
- category——文章分类
- comments——注解、评论
本文就写到这里,至于显示的样式,那是CSS的事情,不在本文讨论的范围。
最后再次感慨一下开源的力量,灰常强大。
万戈
2009-12-23 星期三 21:44
DDBug
2009-12-23 星期三 21:51
万戈
2009-12-24 星期四 12:21
vela
2010-01-02 星期六 17:35
DDBug
2010-01-02 星期六 17:40
疾风
2010-01-02 星期六 19:06
瘦腿
2010-11-26 星期五 19:58