php RSS订阅功能

前几天一个做ruby的朋友,突然问我订阅功能怎么写,愣住了,之前对这个不感冒,都没认真研究。于是谷歌百度。

原理很简单:

  网站对外提供一个接口---》生成xml文件,客户端订阅器---》访问这个接口---》拿到xml文件后,解析成新闻列表形式。

Yii 下面的example:

第一种:用一个feedcreator类(类下载见备注连接第一个)

public function actionRss()

{

include dirname(__FILE__).'/../extensions/rss/feedcreator.php'; //虽然main里面引入了extensions,好像没效果,还是先手动引入一下下吧~

$rss = new UniversalFeedCreator(); //工厂模式

// $rss->encoding = 'utf-8'; //默认是iso编码格式,这边设置encode为utf-8,没效果,需要到rss.php类里面改,这是作者封装处理的小问题。

$rss->useCached();

$rss->title = "test FeedCreator";

$rss->description = "jimliang test FeedCreator";

$rss->link = "http://www.china-***.com";

$rss->syndicationURL = "http://www.china-***.com";

$image = new FeedImage();

$image->title = "china-*** logo";

$image->url = "http://localweb/images/index/nav.png";

$image->link = "http://www.china-***.com";

$image->description = "中国人的系统";

$rss->image = $image;

// get your news items from somewhere, e.g. your database:

$new_obj = new MCNewsList();

$new_list = $new_obj->getNewList(); //自己写的获取新闻列表

foreach($new_list as $new_info){

$item = new FeedItem(); //每次生成一个对象,其实不是很好,下面一个例子更简单

$new_link = $this->createUrl('news/detail',array('id' => $new_info['id']));

$item->title = $new_info['title'];

$item->link = $new_link;

$item->description = $new_info['outline'];

$item->date = $new_info['update_time'];

$item->source = "http://www.china-***.com";

$item->author = "jimliang";

$rss->addItem($item);

}

$rss->saveFeed("ATOM", "/Users/***/Sites/**/api/feed.xml"); //api要可读写,这里其实不一定要写到文件里面,直接输出页面即可,但可能是考虑到复用

}

方法二:YBlog RSS Generator类(类下载见备注连接第二个)

public function actionRss()

{

include dirname(__FILE__).'/../extensions/rss/rss3.php'; //必须手动引入啊

$new_obj = new MCNewsList();

$new_list = $new_obj->getNewList();

$title = 'dddd';

$link = "http://www.china-***.com";

$description = 'test rss class';

$rss = new Rss($title, $link, $description);

foreach($new_list as $new_info){

$new_link = $this->createUrl('news/detail',array('id' => $new_info['id']));

$rss->AddItem($new_info['title'], $new_link, $new_info['outline'], $new_info['update_time']);

}

$rss->Display(); //直接显示

}

相关连接:

http://feedcreator.org/ //第一种方法就是学得这的,封装的功能丰富

http://www.oschina.net/code/snippet_102132_1435 //第二种方法,就是学的这的,简洁,good

http://www.oschina.net/code/snippet_12_152 //无意中发现一个解析RSS的,没测试

http://wenwen.sogou.com/z/q202273191.htm //这个讲ATOM和RSS历史的