RSS 2.0 php生成类,快读生成需要xml文件
来源:互联网 发布:全球网络卫星电视直播 编辑:程序博客网 时间:2024/05/23 13:39
在项目中用到的RSS 2.0版本的php生成类。
只需要根据数据结构吧数据输入进去就能生成一个xml文件,并通过函数输出。
/** * Rss生成模块 * @author JerryLi (@lijian@dzs.mobi) * @see 协议说明 RSS规范遵循 2.0 * http://jyjsjd.iteye.com/blog/1543483 * http://rayleeya.iteye.com/blog/372802 */final class CRssBuilder{ /** * 本地字符集 * @var string */ const LOCAL_CHARSET = 'gbk'; /** * 语言 * @var string */ const LANGUAGE = 'zh-cn'; /** * RSS所有者 * @var string */ const GENERATOR = 'www.csdn.net'; /** * 板块通道 * @var array */ private $_aChannel = null; /** * 构造函数 * @param string $aChannel 频道属性 * <li>array('title'=>'频道标题', 'description'=>'频道摘要', 'link'=>'本频道URL地址')</li> */ public function __construct($aChannel){ header('Content-Type:text/xml; charset=UTF-8'); //必须输出标准的xml头 $this->_aChannel = array('channel'=>$aChannel, 'items'=>array()); } /** * 析构函数 */ public function __destruct(){ } /** * 在通道内添加子项目 * @param int $iChannelId 通道ID(即:addChannel()) * <li>array('title'=>'标题','link'=>'文章的URL地址', 'description'=>'文章摘要','category'=>'栏目名称','utc_timestemp'=>'发布时间')</li> * @return int item的数量 */ public function addItems($aParam){ $this->_aChannel['items'][] = $aParam; return count($this->_aChannel['items']); } /** * 将内容序列化成rss的xml结构数据字符串 * @return string | null */ public function getSerialize(){ static $sTemplateChannel = null; static $sTemplateItem = null; if (empty($sTemplateChannel) || empty($sTemplateItem)){ $aTmp = array(); $aTmp[] = ' <channel>'; $aTmp[] = ' <language>'. self::LANGUAGE .'</language>'; $aTmp[] = ' <generator>'. self::GENERATOR .'</generator>'; $aTmp[] = ' <ttl>'. (60 * 24) .'</ttl>'; //更新时间为24小时 $aTmp[] = ' <pubDate>'. gmdate("D, d M Y 23:59:59", time()) .' GMT</pubDate>'; //当前RSS最后发布的时间 $aTmp[] = ' <title><![CDATA[{@channel_title}]]></title>'; $aTmp[] = ' <link><![CDATA[{@channel_link}]]></link>'; $aTmp[] = ' <description><![CDATA[{@channel_description}]]></description>'; $aTmp[] = '{@item}'; $aTmp[] = ' </channel>'; $sTemplateChannel = implode("\n", $aTmp); unset($aTmp); $aTmp = array(); $aTmp[] = ' <item>'; $aTmp[] = ' <title><![CDATA[{@item_title}]]></title>'; $aTmp[] = ' <link>{@item_link}</link>'; $aTmp[] = ' <description><![CDATA[{@item_description}]]></description>'; $aTmp[] = ' <category><![CDATA[{@item_category}]]></category>'; $aTmp[] = ' <guid><![CDATA[{@item_link}]]></guid>'; $aTmp[] = ' <pubDate>{@item_pubdate}</pubDate>'; //文章发布时间 $aTmp[] = ' </item>'; $sTemplateItem = implode("\n", $aTmp); unset($aTmp); } if (!empty($this->_aChannel)){ $aTmpItem = array(); foreach ($this->_aChannel['items'] as $aItem){ //内层遍历item $aParam = array( '{@item_title}'=> self::convert_encoding($aItem['title'], self::LOCAL_CHARSET), '{@item_link}'=> $aItem['link'], '{@item_description}'=> self::convert_encoding($aItem['description'], self::LOCAL_CHARSET), '{@item_category}'=> self::convert_encoding($aItem['category'], self::LOCAL_CHARSET), '{@item_pubdate}'=> gmdate("D, d M Y 23:59:59", $aItem['utc_timestemp']) .' GMT', ); $aTmpItem[] = strtr($sTemplateItem, $aParam); unset($aParam);$aParam=null; } $aParam = array( '{@channel_title}'=> self::convert_encoding($this->_aChannel['channel']['title'], self::LOCAL_CHARSET), '{@channel_link}'=> $this->_aChannel['channel']['link'], '{@channel_description}'=> self::convert_encoding($this->_aChannel['channel']['description'], self::LOCAL_CHARSET), '{@item}'=> implode("\n", $aTmpItem), ); $aOutBuf = array(); $aOutBuf[] = '<?xml version="1.0" encoding="utf-8" ?>'; $aOutBuf[] = '<rss version="2.0">'; $aOutBuf[] = strtr($sTemplateChannel, $aParam);; unset($aParam);$aParam=null; $aOutBuf[] = '</rss>'; return implode("\n", $aOutBuf); }else{ return null; } } /** * 对变量内容的进行字符编码转换 * @param string $sInCharset 转换前的字符集 * @param string $sOutCharset 转换后的字符集 * @param string | array $mixd 待转换的变量(数组或字符串) * @return string | array 完成转换后的结果 */ static public function convert_encoding(& $mixd, $sInCharset, $sOutCharset='utf-8') { if ($sInCharset === $sOutCharset) //字符集相同时不转换 return $mixd; if (is_array($mixd)) { $tmp = array(); foreach ($mixd as $key => $val) { $tmp[$key] = self::convert_encoding($sInCharset, $sOutCharset, $val); } return $tmp; } else { //字符集相同时不转换 return mb_convert_encoding($mixd, $sOutCharset, $sInCharset); } }}
使用的时候将里面的几个常量修改成你需要的参数,然后如下述用就能输出标准的rss代码。
本程序使用 GBK的本地环境字符集,如果你的本地环境是UTF-8,请修改这个条代码 LOCAL_CHARSET = 'gbk';
/*测试用例*/$aChannel = array('title'=>'每周精选','description'=>'二手车最新新闻','link'=>'http://www.chemao.com.cn/baike-gonglue.html');$o = new CRssBuilder($aChannel);$aItem = array( 'title'=>'迎接Baby ,上车猫网甜蜜选购心仪POLO', 'link'=>'http://www.chemao.com.cn/baike/cwpolo.html', 'description'=>'我和老公相恋于大学,都是北方人。因为家里适合自己的就业机会少,毕业后两人一起来到杭州发展。拼搏了两年,去年7月我们终于结束了5年的爱情长跑,在西子湖畔与亲友一起见证了我们的爱情。', 'category'=>'每周精选', 'utc_timestemp'=>time());$o->addItems($aItem);$aItem = array( 'title'=>'为满足空间需求,买个二手MPV可还行!', 'link'=>'http://www.chemao.com.cn/baike/esmpv.html', 'description'=>'随着二胎政策与全民创业的逐步兴起,路面上跑的MPV越来越多,此类车型的强大用途已经让很多人爱不释手。而金九银十的到来不仅令新车优惠越来越大,二手车价格也在急剧跳水,这其中MPV的价格更是”一贬再贬“,对于想入手这类车型的网友来说,现在下手是绝好时机!下面,下面就为大家推荐几款二手车市场常见的热门MPV。', 'category'=>'每周精选', 'utc_timestemp'=>time());$o->addItems($aItem);echo $o->getSerialize();
0 0
- RSS 2.0 php生成类,快读生成需要xml文件
- php 生成rss文件
- php生成RSS类
- php rss生成类
- php动态生成xml格式的rss文件
- php xml 动态生成 rss 源
- PHP 生成RSS 类 PHP 生成RSS类,非常方便
- 用php实现动态生成rss文件
- PHP 生成 XML文件
- php 生成xml文件
- php生成xml文件
- php生成xml文件
- php生成xml文件
- php生成XML文件
- php生成XML文件
- PHP生成XML文件
- php 生成xml 文件
- PHP生成的XML文件
- 1003. 我要通过!(20)
- iOS开发UI篇—无限轮播(功能完善)
- 兄弟连Linux学习笔记之文件处理命令
- 图灵机器人(智能云交互API)的一个java实现简单例子
- iOS开发拓展篇—静态库
- RSS 2.0 php生成类,快读生成需要xml文件
- 最小的k个数
- 使用Spring容器取出Bean时的奇怪的ClassCastException
- android路上的点点滴滴
- Opencv + vs2012环境配置
- [Leetcode]Unique Paths II
- UVA——620 Cellular Structure
- hdu 4790 Just Random(计数)
- Linux Programing -- ch12-- POSIX 线程