zoukankan      html  css  js  c++  java
  • 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历史的

    1、以专家为榜样,不必自己重新探索
    2、解构技能,找出实现80%效果的那20%
    3、不要一心二用
    4、练习练习再练习!然后获得即时反馈
    5、坚持,不要在低谷期放弃
  • 相关阅读:
    序列化实现 深拷贝
    为边框应用图片 border-image
    阴影 box-shadow(二)
    阴影 box-shadow(一)
    css3之圆角效果 border-radius
    文档对象模型(DOM)
    Cookie/Session机制详解
    PHP错误The server encountered an internal error or misconfiguration and was unable to complete your re
    关于js with语句的一些理解
    使用JavaScript+Html创建win8应用(二)
  • 原文地址:https://www.cnblogs.com/zhongyuan/p/3707104.html
Copyright © 2011-2022 走看看