PHP商城RSS订阅源类开发详解(原创)

一、RSS简介

RSS(ReallySimple Syndication-简易供稿),是一种网页内容联合格式(web contentsydication format)。RSS是XML的一种。所有的RSS文档都遵循XML 1.0规范,该规范发布在W3C网站上。

在一个RSS文档的开头是一个<rss>节点和一个规定的属性version,该属性规定了该文档将以RSS的哪个版本表示。如果该文档以这个规范来表示,那么它的version属性就必须等于2.0。

在<rss>节点的下一级是一个独立的<channel>节点,该节点包含关于channel的信息和内容。

内容信息使用< item>节点表示,< item>的子节点有title、link、author、pubDate、description。

rss:每个RSSFeed,都有而且只能有一个rss标签,作为顶层元素

channel:在RSS标签下,必须有且只能有一个channel标签

item:可以出现多个item,每个item,描述一条日志信息

title:日志的标题

link:日志的URL访问地址

author:日志的作者

pubDate:日志的发布日期

description:日志的内容 
注:具体的语法内容,可以参考 http://wenku.baidu.com/view/bcb222eeaeaad1f346933f64.html

二、RSS格式参考模板

 1 <?xml version="1.0" encoding="utf-8" ?>
 2
 3 <rss version="2.0" xmlns:wfw="http://wellformedweb.org/CommentAPI/">
 4
 5         <channel>
 6
 7                     <title>标题></title>
 8
 9                     <link>链接地址</link>
10
11                     <description>描述</description>
12
13                     <language>描述语言</language>
14
15                     <copyright>版本</copyright>
16
17                     <pubDate>21 Oct 2008 01:43:15 GMT</pubDate>
18
19                     < item>
20
21                                 <title>日志的标题1</title>
22
23                                 <link>日志的URL访问地址</link>
24
25                                 <author>日志的作者</author>
26
27                                 <pubDate>日志的发布日期</pubDate>
28
29                                 <description>日志的内容</description>
30
31                     </item>
32
33                     < item>
34
35                                 <title>日志的标题2</title>
36
37                                 <link>日志的URL访问地址</link>
38
39                                 <author>日志的作者</author>
40
41                                  <pubDate>日志的发布日期</pubDate>
42
43                                 <description>日志的内容</description>
44
45                     </item>
46
47         </channel>
48
49 </rss>

三、RSS错误分析

有时,我们的RSS代码写的是正确的,即单独运行时有用,可是一旦与PHP结合,便会报以下错误,这个问题困扰了我一个上午:


据我经验了解,由于我们编写代码的习惯,我们写PHP程序是,经常会使用稳妥的办法,使用echo xxx,来调试代码,这既是此处报错的原因,可能是因为RSS的代码前面不得有任何的输出(echo xxx);    
同时,php文件的<?php 前不得有空行或者输出内容
                                                    ------此处仅代表本人个人 根据经验总结的思想,还望前辈们不吝赐教

四、PHP商城 RS订阅源实战

(1)首先我们编写一个RS模板  template.xml,如下:

<?xml version="1.0" encoding="utf-8"?>

<rss version="2.0" xmlns:wfw="http://wellformedweb.org/CommentAPI/"></rss>

(2):编写好模板,我们就可以正式开发RS订阅源类了   feed_class.php,代码如下:

(3)好了,此时,我们完成了 RSS模板 和 RSS类的开发,开启Apache 服务器,在浏览器上运行我们的feed_class.php,结果图如下:
正常的结果如下: 
 

在未安装RSS阅读器上,显示的是xml文件代码,结果去下:比如说GOOGLE的Chrome(解决的办法很简单,安装RSS阅读器插件即可)

 1 <?php
 2
 3 //连接数据库,动态生成RSS feed
 4 //连接数据库,取得最新的10条商品,输出XML feed
 5
 6 class feed_class{
 7
 8         public $title = ‘‘;                 //channel的title
 9         public $link  = ‘‘;                //channel的link
10         public $description = ‘‘;     //channel的description
11         public $itemlist = array();
12
13         public $template = ‘‘;        //xml模板
14         protected $dom = null;
15         protected $rss = null;
16         protected $channel = null;
17
18         public function __construct(){
19             $this->dom = new DomDocument("1.0","utf-8");
20             $this->dom->load(‘./template.xml‘);
21             $this->dom->formatOutput = true;
22             $this->rss = $this->dom->getElementsByTagName(‘rss‘)->item(0);
23         }
24
25     //调用createItem,把所有的item节点生成,再输出
26         public function display(){
27             $this->createChannel();
28             $this->addItem($this->itemlist);
29             header(‘content-type: text/xml‘);
30             echo $this->dom->saveXML();
31             //$this->dom->save(‘01.xml‘);        //如需将代码保存,则打开此语句
32         }
33
34         //封装createChannel方法,用于创建RSS唯一且必须的channel节点
35         protected function createChannel(){
36             $channel = $this->dom->createElement(‘channel‘);
37             $channel->appendChild($this->createEle(‘title‘,$this->title));
38             $channel->appendChild($this->createEle(‘link‘,$this->link));
39             $channel->appendChild($this->createEle(‘description‘,$this->description));
40             $this->channel = $channel;
41             $this->rss->appendChild($channel);
42         }
43
44         //封装addItem方法,把所有的商品增加到RSS中去
45         //$list是商品列表,是二维数组,每一行都是一个商品
46         public function addItem($list){
47             foreach($list as $goods){
48                    $this->channel->appendChild($this->createItem($goods));
49             }
50         }
51
52         //封装一个类用于造Item
53         protected function createItem($arr){
54             $item = $this->dom->createElement(‘item‘);
55             foreach($arr as $k=>$v){
56                 $item->appendChild($this->createEle($k,$v));
57             }
58             return $item;
59         }
60
61         //快速创建节点  类似:<name>lover雪</name>
62         public function createEle($name,$value){
63             $ele = $this->dom->createElement($name);
64             $text = $this->dom->createTextNode($value);
65             $ele->appendChild($text);
66
67             return $ele;
68         }
69
70
71 }
72 //连接数据库
73 $conn = mysql_connect(‘localhost‘,‘root‘,‘‘);
74
75
76 mysql_query(‘set names utf8‘,$conn);
77 mysql_query(‘use boolshop1‘);
78
79
80
81 $sql = "select goods_name as title,goods_brief as description from goods order by add_time asc limit 10";
82 $rs = mysql_query($sql,$conn);
83
84
85 $list = array();
86 while($row = mysql_fetch_assoc($rs)){
87     $list[] = $row;
88 }
89
90 $feed1 = new feed_class();
91 $feed1->title = "布尔商城";
92 $feed1->link = "http://127.0.0.1/boolshop/";
93 $feed1->description = "这个一个好商城";
94 $feed1->itemlist = $list;
95
96 $feed1->display();
97
98 ?>

五、总结

RSS 决不是一个完美的格式,但是它现在已经非常流行,并得到广泛的支持。要成为一个固定的规范,RSS需要很长的一段时间。
    编写RSS的xml文件时,由于浏览器的严格解析模式,一旦出现一点点错误,都不会显示任何效果,此时需要足够的耐心去找到错误,并且修正它,
    须特别注意,在RSS代码前不得有任何的文字或者其他信息输出,一旦把这点忘记了,你才会明白,这个错误查找起来是有多么痛苦(因为本人就是犯了这个错误,花了一个上午不断的在调试,过程很痛苦,因为代码根本就没错,也就是说根本就没法查错,有点类似感慨是接触编程时的逻辑错误,没法查)。

时间: 2024-11-07 06:59:58

PHP商城RSS订阅源类开发详解(原创)的相关文章

NopCommerce源码架构详解--初识高性能的开源商城系统cms

很多人都说通过阅读.学习大神们高质量的代码是提高自己技术能力最快的方式之一.我觉得通过阅读NopCommerce的源码,可以从中学习很多企业系统.软件开发的规范和一些新的技术.技巧,可以快速地提高我们的技术能力.所以我最近决定写一个“NopCommerce源码架构详解”的系列,来详细剖析NopCommerce的架构和原理. Nopcommerce主要用到的技术及特点: 1.Entity Framework 2.ASP.NET mvc 3.IoC容器+依赖注入(Autofac) 4.使用EF中的E

为网站加入Drupal星球制作RSS订阅源

目前中文 Drupal 星球的版块还未成立,但大家的积极性挺高,不少站长都已经调整好自己的网站,生成了可供Drupal Planet 使用的RSS订阅源. 如果你也想让网站做好准备,可以不必再花上不少的时间去了解要求和流程,只需要跟着本文了解相关规则.完成几步相关的操作就好了.(Drupal Planet 的官方要求和说明可参见:Planet Drupal guidelines) 制作RSS订阅源:为需要加入Drupal Planet 的内容生成独立的RSS 订阅源(路径可自定义,确保订阅源中的

NopCommerce源码架构详解

NopCommerce源码架构详解--初识高性能的开源商城系统cms 很多人都说通过阅读.学习大神们高质量的代码是提高自己技术能力最快的方式之一.我觉得通过阅读NopCommerce的源码,可以从中学习很多企业系统.软件开发的规范和一些新的技术.技巧,可以快速地提高我们的技术能力.所以我最近决定写一个“NopCommerce源码架构详解”的系列,来详细剖析NopCommerce的架构和原理. Nopcommerce主要用到的技术及特点: 1.Entity Framework 2.ASP.NET 

基于H5的微信支付开发详解

这次总结一下用户在微信内打开网页时,可以调用微信支付完成下单功能的模块开发,也就是在微信内的H5页面通过jsApi接口实现支付功能.当然了,微信官网上的微信支付开发文档也讲解的很详细,并且有实现代码可供参考,有的朋友直接看文档就可以自己实现此支付接口的开发了. 一.前言 为何我还写一篇微信支付接口的博文呢?第一,我们必须知道,所谓的工作经验很多都是靠总结出来的,你只有总结了更多知识,积累了更多经验,你才能在该行业中脱颖而出,我个人觉得如今的招聘,很多都需要工作经验(1年.3年.5年....),其

opencart 模块开发详解

opencart 模块开发详解 由 xiekanxiyang » 2013年 7月 11日 10:17 pm opencart 将页面分成若干模块, 每个模块可以有多个实例(可能这样说不是很恰当) 每个实例可以指定它出现在哪个页面 这样更好的实现了代码的可重用性,可以达到更好的页面布局的可调节性. Opencar内置了几个模块,但实际应用中我们经常要根据需要开发自己模块,现在我给大家介绍下opencart的模块开发的细节 开发步骤:首先:模块代码也分前台,后台. 后台功能是模块的安装,编辑,模块

Android相机开发详解(一)

Android相机开发详解(一) 请支持原创,尊重原创,转载请注明出处:http://blog.csdn.net/kangweijian(来自kangweijian的csdn博客) Android相机开发能够实现打开相机,前后摄像头切换,摄像预览,保存图片,浏览已拍照图片等相机功能. Android相机开发详解(一)主要实现打开相机,摄像预览,前后置摄像头切换,保存图片等四个功能. Android相机开发详解(二)主要实现翻页浏览相片,触控缩放浏览图片,删除图片,发送图片等四个功能. Andro

Apple Watch 开发详解

Apple Watch  开发详解 Apple Watch 开发详解 Apple Watch现在对于第三方开发者来说更多的还是一块额外的屏幕.暂时WatchKit没有能给出足够的接口.现在Watch App的主要运算逻辑需要依赖iPhone,Apple也承诺会有原生的手表App,可能要等到Apple Watch和WatchKit的完全版面世的时候. 1.两种屏幕分辨率 屏幕尺寸 38mm 42mm 分辨率 272 x 340 312 x 390 宽高比 4:5 4:5 2.三种屏幕模式 主屏模式

****基于H5的微信支付开发详解[转]

这次总结一下用户在微信内打开网页时,可以调用微信支付完成下单功能的模块开发,也就是在微信内的H5页面通过jsApi接口实现支付功能.当然了,微信官网上的微信支付开发文档也讲解的很详细,并且有实现代码可供参考,有的朋友直接看文档就可以自己实现此支付接口的开发了. 一.前言 为何我还写一篇微信支付接口的博文呢?第一,我们必须知道,所谓的工作经验很多都是靠总结出来的,你只有总结了更多知识,积累了更多经验,你才能在该行业中脱颖而出,我个人觉得如今的招聘,很多都需要工作经验(1年.3年.5年....),其

t持久化与集群部署开发详解

Quartz.net持久化与集群部署开发详解 序言 我前边有几篇文章有介绍过quartz的基本使用语法与类库.但是他的执行计划都是被写在本地的xml文件中.无法做集群部署,我让它看起来脆弱不堪,那是我的罪过. 但是quart.net是经过许多大项目的锤炼,走到啦今天,支持集群高可用的开发方案那是一定的,今天我就给小结下我的quartz.net开发升级过程. Quartz.net的数据库表结构 如果支持集群与持久化,单靠本机的内存和xml来保存计算任务调度的各种状态值,可想而知,是困难的.所以支持