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历史的

posted @ 2014-05-04 15:22  zyliang  阅读(745)  评论(0编辑  收藏  举报