rss生成类[代码]

 更新时间:2016年11月25日 16:55  点击:2012


<?php
/*****************************************
*           RSS2.0 Generator
*          Create by MagicBoy(darasion)
*          Copyright ? 神奇男孩 
******************************************/

/*————————————————

使用方法:
将下面的数组,带入相应的函数。

1、频道主体
$channel = array(
title => '频道名称(必备)',
link => '频道的URL(必备)',
description => '频道的描述(必备)',
language => '频道文章所用语言(可选)',
webmaster => '负责频道技术事务的网站管理员email(可选)',
managingEditor => '责任编辑的email(可选)',
pubDate => '频道内容发布日期,格式遵循RFC822格式(年份可为2位或4位)(可选)',
lastBuildDate => '频道内容最后的修改日期(Sat, 07 Sep 2002 09:42:31 GMT)(可选)',
skipDays => '提示新闻聚合器,那些天它可以跳过。(可选)',
copyright => '频道内容的版权说明(可选)',
ttl => '有效期,用以指明该频道可被缓存的最长时间(可选)',
);

2、频道图片
$image = array(
url => '图片的链接(必备)',
title => '图片的标题,用于http的alt属性(必备)',
link => '网站的url(实际中常以频道的url代替)(必备)',
width => '图片的宽度(象素为单位)最大144,默认88(可选)',
height => '图片的高度(象素为单位)最大400,默认31(可选)',
description => '用于link的title属性(可选)' 
   );

3、频道项
$item = array(
title => '项(item)的标题(必备)',
description => '项的大纲(必备)',
link => '项的URL(必备)',
comments => '该项的评论(comments)页的URL(可选)',
guid => '1项的唯一标志符串(可选)',
author => '该项作者的email(可选)',
enclosure => '描述该附带的媒体对象(可选)',
category => '包含该项的一个或几个分类(catogory)(可选)',
pubdate => '项的发布时间(可选)',
source_url => '该项来自的RSS道(可选)',
source_name => '该项来自的RSS道(可选)'
);
————————————————*/

class 
rss2
{
var 
$channel_pre=""
;
var 
$str_image=""
;
var 
$str_item=""
;
var 
$channel_end=""
;
/*构造函数*/
function rss2($channel,$encoding="GB2312"
)
  {
   
$this->channel($channel,$encoding
);
  }
/*生成频道主体*/
function channel($channel,$encoding="GB2312"
)
  {
  
$this->channel_pre.="<?xml version=\"1.0\" encoding=\"$encoding\"?>\n"
;
  
$this->channel_pre.= "<rss version=\"2.0\">\n"
;

  
$this->channel_pre.= " <channel>\n"
;

  
$this->channel_pre.= "  <title>".$channel['title']."</title>\n";
//频道名称(必备)
  
$this->channel_pre.= "  <link>".$channel['link']."</link>\n";
//频道的URL(必备)
  
$this->channel_pre.= "  <description>".$channel['description']."</description>\n";
//频道的描述(必备)
  
$this->channel_pre.= "  <generator>MagicBoy RSS Generator v1.0</generator>\n";
//创建此文档的程序(可选)

  
if(isset($channel['language']))$this->channel_pre.= "  <language>".$channel['language']."</language>\n";
//频道文章所用语言(可选)
  
if(isset($channel['webmaster']))$this->channel_pre.= "  <webMaster>".$channel['webmaster']."</webMaster>\n";
//负责频道技术事务的网站管理员email(可选)
  
if(isset($channel['managingeditor']))$this->channel_pre.= "  <managingEditor>".$channel['managingeditor']."</managingEditor>\n";
//责任编辑的email(可选)
  
if(isset($channel['pubdate']))$this->channel_pre.= "  <pubDate>".$channel['pubdate']."</pubDate>\n";
//频道内容发布日期,格式遵循RFC822格式(年份可为2位或4位)(可选)
  
if(isset($channel['lastbuilddate']))$this->channel_pre.= "  <lastBuildDate>".$channel['lastbuilddate']."</lastBuildDate>\n";
//频道内容最后的修改日期(Sat, 07 Sep 2002 09:42:31 GMT)(可选)
  
if(isset($channel['skipdays']))$this->channel_pre.= "  <skipDays>".$channel['skipdays']."</skipDays>\n";
//提示新闻聚合器,那些天它可以跳过。(可选)
  
if(isset($channel['copyright']))$this->channel_pre.= "  <copyright>".$channel['copyright']."</copyright>\n";
//频道内容的版权说明(可选)
  
if(isset($channel['ttl']))$this->channel_pre.= "  <ttl>".$channel['ttl']."</ttl>\n";
//有效期,用以指明该频道可被缓存的最长时间(可选)

  
$this->channel_end.= " </channel>\n"
;
  
$this->channel_end.= "</rss>\n"
;
}
/*生成频道图片*/
function image($image
)
{
  if(isset(
$this->str_image))unset($this->str_image
);
  
$this->str_image.= "  <image>\n"
;
  if(isset(
$image['url']))$this->str_image.= "   <url>".$image['url']."</url>\n";
//图片的url(必备)
  
if(isset($image['title']))$this->str_image.= "   <title>".$image['title']."</title>\n";
//图片的标题,用于http的alt属性(必备)
  
if(isset($image['link']))$this->str_image.= "   <link>".$image['link']."</link>\n";
//网站的url(实际中常以频道的url代替)(必备)
  
if(isset($image['width']))$this->str_image.= "   <width>".$image['width']."</width>\n";
//图片的宽度(象素为单位)最大144,默认88(可选)
  
if(isset($image['height']))$this->str_image.= "   <height>".$image['height']."</height>\n";
//图片的高度(象素为单位)最大400,默认31(可选) 
  
if(isset($image['description']))$this->str_image.= "   <description>".$image['description']."</description>\n";
//用于link的title属性(可选)
  
$this->str_image.= "  </image>\n"
;
}
/*频道项*/
function item($item
)
{
  
$this->str_item.="  <item>\n"
;
  
$this->str_item.="   <title>".$item['title']."</title>\n";
//项(item)的标题(必备)
  
$this->str_item.="   <description>".$item['description']."</description>\n";
//项的大纲(必备)
  
$this->str_item.="   <link>".$item['link']."</link>\n";
//项的URL(必备)

  
if(isset($item['comments']))$this->str_item.="   <comments>".$item['comments']."</comments>\n";
//该项的评论(comments)页的URL(可选)
  
if(isset($item['guid']))$this->str_item.="   <guid>".$item['guid']."</guid>\n";
//1项的唯一标志符串(可选)
  
if(isset($item['author']))$this->str_item.="   <author>".$item['author']."</author>\n";
//该项作者的email(可选)
  
if(isset($item['enclosure']))$this->str_item.="   <enclosure>".$item['enclosure']."</enclosure>\n";
//描述该附带的媒体对象(可选)
  
if(isset($item['category']))$this->str_item.="   <category>".$item['category']."</category>\n";
//包含该项的一个或几个分类(catogory)(可选)
  
if(isset($item['pubdate']))$this->str_item.="   <pubDate>".$item['pubdate']."</pubDate>\n";
//项的发布时间(可选)
  
if(isset($item['source_url']))$this->str_item.="   <source url=\"".$item['source_url']."\">".$item['source_name']."</source>\n";
//该项来自的RSS道(可选)
  
$this->str_item.="  </item>\n"
;
}
/*输出xml*/
function generate
()
{
  if(isset(
$this->channel_pre)&&isset($this->channel_end)&&isset($this->str_item
))
  {
   
Header("Content-type:text/xml"
);
   echo 
$this->channel_pre
;
   echo 
$this->str_image
;
   echo 
$this->str_item
;
   echo 
$this->channel_end
;
  }
}
/*擦除频道*/
function erase_channel
()
{
  unset(
$this->channel_pre
);
  unset(
$this->channel_end
);
}
/*擦除频道图片*/
function erase_image
()
{
  unset(
$this->str_image
);
}
/*擦除项目*/
function erase_item
()
{
  unset(
$this->str_item
);
}
/*擦除所有*/
function erase
()
{
  
$this->erase_channel
();
  
$this->erase_image
();
  
$this->erase_item
();
}
}
?>

 php 读取xml   php读取远程xml   php 读取文件   读取xml文件 
 

<?php
$path = 'http://xxx.xxx.xxx/example.xml';
$str = file_get_contents($path);
$str = <<<str
...
<yw:cdtn text="Fair" code="34" temp="7" date="Thu, 10 Apr 2008 9:50 am BST" />
...
<yw:f day="Thu" date="10 Apr 2008" low="1" high="11" text="Light Rain" code="11" />
<yw:f day="Fri" date="11 Apr 2008" low="1" high="10" text="Light Rain" code="11" />
...
str;
preg_match('/<yw:cdtn.*text="(.*)"/iU', $str, $arr);
echo $arr[1];
preg_match_all('/<yw:f.*text="(.*)"/iU', $str, $arr);
print_r($arr[1]);
?>

php读取xml文件
<?php
class 
HTTPRequest
{
    var 
$_fp;        
// HTTP socket
    
var $_url;        
// full URL
    
var $_host;        
// HTTP host
    
var $_protocol;    
// protocol (HTTP/HTTPS)
    
var $_uri;        
// request URI
    
var $_port;        
// port
    
    // scan url
    
function _scan_url
()
    {
        
$req $this->_url
;
        
        
$pos strpos($req'://'
);
        
$this->_protocol strtolower(substr($req0$pos
));
        
        
$req substr($req$pos+3
);
        
$pos strpos($req'/'
);
        if(
$pos === false
)
            
$pos strlen($req
);
        
$host substr($req0$pos
);
        
        if(
strpos($host':') !== false
)
        {
            list(
$this->_host$this->_port) = explode(':'$host
);
        }
        else 
        {
            
$this->_host $host
;
            
$this->_port = ($this->_protocol == 'https') ? 443 80
;
        }
        
        
$this->_uri substr($req$pos
);
        if(
$this->_uri == ''
)
            
$this->_uri '/'
;
    }
    
    
// constructor
    
function HTTPRequest($url
)
    {
        
$this->_url $url
;
        
$this->_scan_url
();
    }
    
    
// download URL to string
    
function DownloadToString
()
    {
        
$crlf "\r\n"
;
        
        
// generate request
        
$req 'GET ' $this->_uri ' HTTP/1.0' 
$crlf
            
.    'Host: ' $this->_host 
$crlf
            
.    $crlf
;
        
        
// fetch
        
$this->_fp fsockopen(($this->_protocol == 'https' 'ssl://' '') . $this->_host$this->_port
);
        
fwrite($this->_fp$req
);
        while(
is_resource($this->_fp) && $this->_fp && !feof($this->_fp
))
            
$response .= fread($this->_fp1024
);
        
fclose($this->_fp
);
        
        
// split header and body
        
$pos strpos($response$crlf $crlf
);
        if(
$pos === false
)
            return(
$response
);
        
$header substr($response0$pos
);
        
$body substr($response$pos strlen($crlf
));
        
        
// parse headers
        
$headers 
= array();
        
$lines explode($crlf$header
);
        foreach(
$lines as $line
)
            if((
$pos strpos($line':')) !== false
)
                
$headers[strtolower(trim(substr($line0$pos)))] = trim(substr($line$pos+1
));
        
        
// redirection?
        
if(isset($headers['location'
]))
        {
            
$http = new HTTPRequest($headers['location'
]);
            return(
$http->DownloadToString($http
));
        }
        else 
        {
            return(
$body
);
        }
    }
function 
dhtmlspecialchars($string
) {
  if(
is_array($string
)) {
   foreach(
$string as $key => $val
) {
    
$string[$key] = dhtmlspecialchars($val
);
   }
  } else {
     
$string preg_replace('/&((#(\d{3,5}|x[a-fA-F0-9]{4})|[a-zA-Z][a-z0-9]{2,5});)/''&\\1'
,
     
str_replace(array('&''"''<''>'), array('&''"''<''>'), $string
));
   }
      return 
$string
;
}
function 
returnSubstrings($text$openingMarker$closingMarker
) {
    
$openingMarkerLength strlen($openingMarker
);
    
$closingMarkerLength strlen($closingMarker
);
    
$result 
= array();
    
$position 0
;
    while ((
$position strpos($text$openingMarker$position)) !== false
) {
      
$position += $openingMarkerLength
;
      if ((
$closingMarkerPosition strpos($text$closingMarker$position)) !== false
) {
        
$result[] = substr($text$position$closingMarkerPosition $position
);
        
$position $closingMarkerPosition $closingMarkerLength
;
       }
    }
    return 
$result
;
}
function 
is_mail($Argv
){
        
$RegExp='/^[a-z0-9][a-z\.0-9-_]+@[a-z0-9_-]+(?:\.[a-z]{0,3}\.[a-z]{0,2}|\.[a-z]{0,3}|\.[a-z]{0,2})$/i'
;
        return 
preg_match($RegExp,$Argv)?$Argv:false
;

}
?>

今天听同事说要用xml 文件与flash进行交互,今天就试着来写一个看看,但用DOMdocument这种知道为什么多行时就出现问题,所以想到用fopen来生成了,很简单的,

$head ='<?xml version="1.0" encoding="gb2312" ?> <channel>';
$stp  ='<item><title>这么简单啊,真的是爽啊.</title><link>http://www.111cn.net</link><data>2008-02-28</data></item>';
for($i=1;$i<=4;$i++){
 $stp .=$stp;
}
$foot ='</channel>';
$cont =fopen("test.xml",'w');
fwrite($cont,$head.$stp.$foot);
fclose($cont);

PHP代码:
<?
/**
* 轻量级XML文档生成类(非dom)
* 支持Element/CDATA/Declare/attribute/Comment,可选择是否包含换行和缩进
*/
class xml {

/** 元素名 */
var $name;
/** 元素值 */
var $value;
/** 元素类型 */
var $type;
/** 元素属性 */
var $attrib;
/** XML声明 */
var $declare;
/** 是否缩进换行 */
var $space;

/** 构造函数 */
function xml($name='',$value='') {
$this->name = $name;
$this->value = $value;
$this->declare = array();
$this->setTypes('Element');
$this->setAttrib(array());
$this->setSpace(false);
}

/** 设置元素类型 */
function setTypes($type) {
$this->type = $type;
}

/** 设置是否缩进换行 */
function setSpace($space) {
$this->space = $space;
}

/** 设置元素属性 */
function setAttrib($name,$value='') {
if(is_array($name)) {
$this->attrib = array_merge($this->attrib,$name);
}else {
$this->attrib[$name] = $value;
}
}

/** 添加子元素 */
function &addElement($name='',$value='') {
if(!is_array($this->value)) {
$this->value = array();
}
$xml = new xml($name,$value);
$xml->setSpace($this->space);
$this->value[] = &$xml;
return $this->value[sizeof($this->value)-1];
}

/** 添加CDATA数据 */
function &addCDATA($name='',$value='') {
if(!is_array($this->value)) {
$this->value = array();

[!--infotagslink--]

相关文章

  • php svn操作类

    以前我们开发大型项目时都会用到svn来同步,因为开发产品的人过多,所以我们会利用软件来管理,今天发有一居然可以利用php来管理svn哦,好了看看吧。 代码如下 ...2016-11-25
  • PHP 数据库缓存Memcache操作类

    操作类就是把一些常用的一系列的数据库或相关操作写在一个类中,这样调用时我们只要调用类文件,如果要执行相关操作就直接调用类文件中的方法函数就可以实现了,下面整理了...2016-11-25
  • 不打开网页直接查看网站的源代码

      有一种方法,可以不打开网站而直接查看到这个网站的源代码..   这样可以有效地防止误入恶意网站...   在浏览器地址栏输入:   view-source:http://...2016-09-20
  • php 调用goolge地图代码

    <?php require('path.inc.php'); header('content-Type: text/html; charset=utf-8'); $borough_id = intval($_GET['id']); if(!$borough_id){ echo ' ...2016-11-25
  • JS基于Mootools实现的个性菜单效果代码

    本文实例讲述了JS基于Mootools实现的个性菜单效果代码。分享给大家供大家参考,具体如下:这里演示基于Mootools做的带动画的垂直型菜单,是一个初学者写的,用来学习Mootools的使用有帮助,下载时请注意要将外部引用的mootools...2015-10-23
  • JS+CSS实现分类动态选择及移动功能效果代码

    本文实例讲述了JS+CSS实现分类动态选择及移动功能效果代码。分享给大家供大家参考,具体如下:这是一个类似选项卡功能的选择插件,与普通的TAb区别是加入了动画效果,多用于商品类网站,用作商品分类功能,不过其它网站也可以用,...2015-10-21
  • JS实现自定义简单网页软键盘效果代码

    本文实例讲述了JS实现自定义简单网页软键盘效果。分享给大家供大家参考,具体如下:这是一款自定义的简单点的网页软键盘,没有使用任何控件,仅是为了练习JavaScript编写水平,安全性方面没有过多考虑,有顾虑的可以不用,目的是学...2015-11-08
  • php 取除连续空格与换行代码

    php 取除连续空格与换行代码,这些我们都用到str_replace与正则函数 第一种: $content=str_replace("n","",$content); echo $content; 第二种: $content=preg_replac...2016-11-25
  • Php文件上传类class.upload.php用法示例

    本文章来人大家介绍一个php文件上传类的使用方法,期望此实例对各位php入门者会有不小帮助哦。 简介 Class.upload.php是用于管理上传文件的php文件上传类, 它可以帮...2016-11-25
  • php简单用户登陆程序代码

    php简单用户登陆程序代码 这些教程很对初学者来讲是很有用的哦,这款就下面这一点点代码了哦。 <center> <p>&nbsp;</p> <p>&nbsp;</p> <form name="form1...2016-11-25
  • PHP实现清除wordpress里恶意代码

    公司一些wordpress网站由于下载的插件存在恶意代码,导致整个服务器所有网站PHP文件都存在恶意代码,就写了个简单的脚本清除。恶意代码示例...2015-10-23
  • js识别uc浏览器的代码

    其实挺简单的就是if(navigator.userAgent.indexOf('UCBrowser') > -1) {alert("uc浏览器");}else{//不是uc浏览器执行的操作}如果想测试某个浏览器的特征可以通过如下方法获取JS获取浏览器信息 浏览器代码名称:navigator...2015-11-08
  • JS实现双击屏幕滚动效果代码

    本文实例讲述了JS实现双击屏幕滚动效果代码。分享给大家供大家参考,具体如下:这里演示双击滚屏效果代码的实现方法,不知道有觉得有用处的没,现在网上还有很多还在用这个特效的呢,代码分享给大家吧。运行效果截图如下:在线演...2015-10-30
  • JS日期加减,日期运算代码

    一、日期减去天数等于第二个日期function cc(dd,dadd){//可以加上错误处理var a = new Date(dd)a = a.valueOf()a = a - dadd * 24 * 60 * 60 * 1000a = new Date(a)alert(a.getFullYear() + "年" + (a.getMonth() +...2015-11-08
  • PHP开发微信支付的代码分享

    微信支付,即便交了保证金,你还是处理测试阶段,不能正式发布。必须到你通过程序测试提交订单、发货通知等数据到微信的系统中,才能申请发布。然后,因为在微信中是通过JS方式调用API,必须在微信后台设置支付授权目录,而且要到...2014-05-31
  • php二维码生成

    本文介绍两种使用 php 生成二维码的方法。 (1)利用google生成二维码的开放接口,代码如下: /** * google api 二维码生成【QRcode可以存储最多4296个字母数字类型的任意文本,具体可以查看二维码数据格式】 * @param strin...2015-10-21
  • Java生成随机姓名、性别和年龄的实现示例

    这篇文章主要介绍了Java生成随机姓名、性别和年龄的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-01
  • PHP实现无限级分类(不使用递归)

    无限级分类在开发中经常使用,例如:部门结构、文章分类。无限级分类的难点在于“输出”和“查询”,例如 将文章分类输出为<ul>列表形式; 查找分类A下面所有分类包含的文章。1.实现原理 几种常见的实现方法,各有利弊。其中...2015-10-23
  • PHP常用的小程序代码段

    本文实例讲述了PHP常用的小程序代码段。分享给大家供大家参考,具体如下:1.计算两个时间的相差几天$startdate=strtotime("2009-12-09");$enddate=strtotime("2009-12-05");上面的php时间日期函数strtotime已经把字符串...2015-11-24
  • PHP实现递归无限级分类

    在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性。那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类。 递归,简单的说就是一段程序代码的重复调用,当把...2015-10-23