目录
php生成RSS订阅的方法,phprss订阅
首页 后端开发 php教程 php生成RSS订阅的方法,phprss订阅_PHP教程

php生成RSS订阅的方法,phprss订阅_PHP教程

Jul 13, 2016 am 10:06 AM
php rss

php生成RSS订阅的方法,phprss订阅

本文实例讲述了php生成RSS订阅的方法。分享给大家供大家参考。具体分析如下:

RSS(简易信息聚合,也叫聚合内容)是一种描述和同步网站内容的格式。RSS可以是以下三个解释的其中一个: Really Simple Syndication;RDF (Resource Description Framework) Site Summary; Rich Site Summary。但其实这三个解释都是指同一种Syndication的技术。RSS目前广泛用于网上新闻频道,blog和wiki。使用RSS订阅能更快地获取信息,网站提供RSS输出,有利于让用户获取网站内容的最新更新。网络用户可以在客户端借助于支持RSS的聚合工具软件,在不打开网站内容页面的情况下阅读支持RSS输出的网站内容。
从技术上来说一个RSS文件就是一段规范的XML数据,该文件一般以rss,xml或者rdf作为后缀,下面是一段 rss 文件的内容示例:

复制代码 代码如下:



帮客之家
http://www.bkjia.com/
帮客之家

RSS Tutorial
网站地址/rss
New RSS tutorial on W3School


XML Tutorial
网站地址/xml
New XML tutorial on W3School


下面分享一段使用 php 动态生成 RSS 的代码示例:

复制代码 代码如下:
/**
** php 动态生成 RSS 类
**/
define("TIME_ZONE","");
define("FEEDCREATOR_VERSION","www.jb51.net");//您的网址
class FeedItem extends HtmlDescribable{
    var $title,$description,$link;
    var $author,$authorEmail,$image,$category,$comments,$guid,$source,$creator;
    var $date;
    var $additionalElements=Array();
}
 
class FeedImage extends HtmlDescribable{
    var $title,$url,$link;
    var $width,$height,$description;
}
 
class HtmlDescribable{
    var $descriptionHtmlSyndicated;
    var $descriptionTruncSize;
 
    function getDescription(){
        $descriptionField=new FeedHtmlField($this->description);
        $descriptionField->syndicateHtml=$this->descriptionHtmlSyndicated;
        $descriptionField->truncSize=$this->descriptionTruncSize;
        return $descriptionField->output();
    }
}
 
class FeedHtmlField{
    var $rawFieldContent;
    var $truncSize,$syndicateHtml;
    function FeedHtmlField($parFieldContent){
        if($parFieldContent){
            $this->rawFieldContent=$parFieldContent;
        }
    }
    function output(){
        if(!$this->rawFieldContent){
            $result="";
        }    elseif($this->syndicateHtml){
            $result="rawFieldContent."]]>";
        }else{
            if($this->truncSize and is_int($this->truncSize)){
                $result=FeedCreator::iTrunc(htmlspecialchars($this->rawFieldContent),$this->truncSize);
            }else{
                $result=htmlspecialchars($this->rawFieldContent);
            }
        }
        return $result;
    }
}
 
class UniversalFeedCreator extends FeedCreator{
    var $_feed;
    function _setFormat($format){
        switch (strtoupper($format)){
            case "2.0":
                // fall through
            case "RSS2.0":
                $this->_feed=new RSSCreator20();
                break;
            case "0.91":
                // fall through
            case "RSS0.91":
                $this->_feed=new RSSCreator091();
                break;
            default:
                $this->_feed=new RSSCreator091();
                break;
        }
        $vars=get_object_vars($this);
        foreach ($vars as $key => $value){
            // prevent overwriting of properties "contentType","encoding"; do not copy "_feed" itself
            if(!in_array($key, array("_feed","contentType","encoding"))){
                $this->_feed->{$key}=$this->{$key};
            }
        }
    }
 
    function createFeed($format="RSS0.91"){
        $this->_setFormat($format);
        return $this->_feed->createFeed();
    }
 
    function saveFeed($format="RSS0.91",$filename="",$displayContents=true){
        $this->_setFormat($format);
        $this->_feed->saveFeed($filename,$displayContents);
    }
 
    function useCached($format="RSS0.91",$filename="",$timeout=3600){
        $this->_setFormat($format);
        $this->_feed->useCached($filename,$timeout);
    }
}
 
class FeedCreator extends HtmlDescribable{
    var $title,$description,$link;
    var $syndicationURL,$image,$language,$copyright,$pubDate,$lastBuildDate,$editor,$editorEmail,$webmaster,$category,$docs,$ttl,$rating,$skipHours,$skipDays;
    var $xslStyleSheet="";
    var $items=Array();
    var $contentType="application/xml";
    var $encoding="utf-8";
    var $additionalElements=Array();
 
    function addItem($item){
        $this->items[]=$item;
    }
 
    function clearItem2Null(){
        $this->items=array();
    }
 
    function iTrunc($string,$length){
        if(strlen($string)             return $string;
        }
 
        $pos=strrpos($string,".");
        if($pos>=$length-4){
            $string=substr($string,0,$length-4);
            $pos=strrpos($string,".");
        }
        if($pos>=$length*0.4){
            return substr($string,0,$pos+1)." ...";
        }
 
        $pos=strrpos($string," ");
        if($pos>=$length-4){
            $string=substr($string,0,$length-4);
            $pos=strrpos($string," ");
        }
        if($pos>=$length*0.4){
            return substr($string,0,$pos)." ...";
        }
 
        return substr($string,0,$length-4)." ...";
    }
 
    function _createGeneratorComment(){
        return "\n";
    }
 
    function _createAdditionalElements($elements,$indentString=""){
        $ae="";
        if(is_array($elements)){
            foreach($elements AS $key => $value){
                $ae.= $indentString."$value$key>\n";
            }
        }
        return $ae;
    }
 
    function _createStylesheetReferences(){
        $xml="";
        if($this->cssStyleSheet) $xml .= "cssStyleSheet."\" type=\"text/css\"?>\n";
        if($this->xslStyleSheet) $xml .= "xslStyleSheet."\" type=\"text/xsl\"?>\n";
        return $xml;
    }
 
    function createFeed(){}
 
    function _generateFilename(){
        $fileInfo=pathinfo($_SERVER["PHP_SELF"]);
        return substr($fileInfo["basename"],0,-(strlen($fileInfo["extension"])+1)).".xml";
    }
 
    function _redirect($filename){
        Header("Content-Type: ".$this->contentType."; charset=".$this->encoding."; filename=".basename($filename));
        Header("Content-Disposition: inline; filename=".basename($filename));
        readfile($filename,"r");
        die();
    }
 
    function useCached($filename="",$timeout=3600){
        $this->_timeout=$timeout;
        if($filename==""){
            $filename=$this->_generateFilename();
        }
        if(file_exists($filename) && (time()-filemtime($filename)             $this->_redirect($filename);
        }
    }
 
    function saveFeed($filename="",$displayContents=true){
        if($filename==""){
            $filename=$this->_generateFilename();
        }
        $feedFile=fopen($filename,"w+");
        if($feedFile){
            fputs($feedFile,$this->createFeed());
            fclose($feedFile);
            if($displayContents){
                $this->_redirect($filename);
            }
        }else{
            echo "
Error creating feed file, please check write permissions.
";
        }
    }
}
 
class FeedDate{
    var $unix;
    function FeedDate($dateString=""){
        if($dateString=="") $dateString=date("r");
        if(is_integer($dateString)){
            $this->unix=$dateString;
            return;
        }
        if(preg_match("~(?:(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun),\\s+)?(\\d{1,2})\\s+([a-zA-Z]{3})\\s+(\\d{4})\\s+(\\d{2}):(\\d{2}):(\\d{2})\\s+(.*)~",$dateString,$matches)){
            $months=Array("Jan"=>1,"Feb"=>2,"Mar"=>3,"Apr"=>4,"May"=>5,"Jun"=>6,"Jul"=>7,"Aug"=>8,"Sep"=>9,"Oct"=>10,"Nov"=>11,"Dec"=>12);
            $this->unix=mktime($matches[4],$matches[5],$matches[6],$months[$matches[2]],$matches[1],$matches[3]);
            if(substr($matches[7],0,1)=='+' OR substr($matches[7],0,1)=='-'){
                $tzOffset=(substr($matches[7],0,3) * 60 + substr($matches[7],-2)) * 60;
            }else{
                if(strlen($matches[7])==1){
                    $oneHour=3600;
                    $ord=ord($matches[7]);
                    if($ord                         $tzOffset=(ord("A") - $ord - 1) * $oneHour;
                    } elseif($ord >= ord("M") && $matches[7]!="Z"){
                        $tzOffset=($ord - ord("M")) * $oneHour;
                    } elseif($matches[7]=="Z"){
                        $tzOffset=0;
                    }
                }
                switch ($matches[7]){
                    case "UT":
                    case "GMT":    $tzOffset=0;
                }
            }
            $this->unix += $tzOffset;
            return;
        }
        if(preg_match("~(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(.*)~",$dateString,$matches)){
            $this->unix=mktime($matches[4],$matches[5],$matches[6],$matches[2],$matches[3],$matches[1]);
            if(substr($matches[7],0,1)=='+' OR substr($matches[7],0,1)=='-'){
                $tzOffset=(substr($matches[7],0,3) * 60 + substr($matches[7],-2)) * 60;
            }else{
                if($matches[7]=="Z"){
                    $tzOffset=0;
                }
            }
            $this->unix += $tzOffset;
            return;
        }
        $this->unix=0;
    }
 
    function rfc822(){
        $date=gmdate("Y-m-d H:i:s",$this->unix);
        if(TIME_ZONE!="") $date .= " ".str_replace(":","",TIME_ZONE);
        return $date;
    }
 
    function iso8601(){
        $date=gmdate("Y-m-d H:i:s",$this->unix);
        $date=substr($date,0,22) . ':' . substr($date,-2);
        if(TIME_ZONE!="") $date=str_replace("+00:00",TIME_ZONE,$date);
        return $date;
    }
 
    function unix(){
        return $this->unix;
    }
}
 
class RSSCreator10 extends FeedCreator{
    function createFeed(){
        $feed="encoding."\"?>\n";
        $feed.= $this->_createGeneratorComment();
        if($this->cssStyleSheet==""){
            $cssStyleSheet="http://www.w3.org/2000/08/w3c-synd/style.css";
        }
        $feed.= $this->_createStylesheetReferences();
        $feed.= "         $feed.= "    xmlns=\"http://purl.org/rss/1.0/\"\n";
        $feed.= "    xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n";
        $feed.= "    xmlns:slash=\"http://purl.org/rss/1.0/modules/slash/\"\n";
        $feed.= "    xmlns:dc=\"http://purl.org/dc/elements/1.1/\">\n";
        $feed.= "    syndicationURL."\">\n";
        $feed.= "        ".htmlspecialchars($this->title)."\n";
        $feed.= "        ".htmlspecialchars($this->description)."\n";
        $feed.= "        ".$this->link."\n";
        if($this->image!=null){
            $feed.= "        image->url."\" />\n";
        }
        $now=new FeedDate();
        $feed.= "       ".htmlspecialchars($now->iso8601())."\n";
        $feed.= "        \n";
        $feed.= "            \n";
        for ($i=0;$iitems);$i++){
            $feed.= "               
  • items[$i]->link)."\"/>\n";
            }
            $feed.= "           
  • \n";
            $feed.= "       
    \n";
            $feed.= "   
    \n";
            if($this->image!=null){
                $feed.= "    image->url."\">\n";
                $feed.= "        ".$this->image->title."\n";
                $feed.= "        ".$this->image->link."\n";
                $feed.= "        ".$this->image->url."\n";
                $feed.= "    \n";
            }
            $feed.= $this->_createAdditionalElements($this->additionalElements,"    ");
     
            for ($i=0;$iitems);$i++){
                $feed.= "    items[$i]->link)."\">\n";
                //$feed.= "        Posting\n";
                $feed.= "        text/html\n";
                if($this->items[$i]->date!=null){
                    $itemDate=new FeedDate($this->items[$i]->date);
                    $feed.= "        ".htmlspecialchars($itemDate->iso8601())."\n";
                }
                if($this->items[$i]->source!=""){
                    $feed.= "        ".htmlspecialchars($this->items[$i]->source)."\n";
                }
                if($this->items[$i]->author!=""){
                    $feed.= "        ".htmlspecialchars($this->items[$i]->author)."\n";
                }
                $feed.= "        ".htmlspecialchars(strip_tags(strtr($this->items[$i]->title,"\n\r","  ")))."\n";
                $feed.= "        ".htmlspecialchars($this->items[$i]->link)."\n";
                $feed.= "        ".htmlspecialchars($this->items[$i]->description)."\n";
                $feed.= $this->_createAdditionalElements($this->items[$i]->additionalElements,"        ");
                $feed.= "   
    \n";
            }
            $feed.= "\n";
            return $feed;
        }
    }
     
    class RSSCreator091 extends FeedCreator{
        var $RSSVersion;
     
        function RSSCreator091(){
            $this->_setRSSVersion("0.91");
            $this->contentType="application/rss+xml";
        }
     
        function _setRSSVersion($version){
            $this->RSSVersion=$version;
        }
     
        function createFeed(){
            $feed="encoding."\"?>\n";
            $feed.= $this->_createGeneratorComment();
            $feed.= $this->_createStylesheetReferences();
            $feed.= "RSSVersion."\">\n";
            $feed.= "    \n";
            $feed.= "        ".FeedCreator::iTrunc(htmlspecialchars($this->title),100)."\n";
            $this->descriptionTruncSize=500;
            $feed.= "        ".$this->getDescription()."\n";
            $feed.= "        ".$this->link."\n";
            $now=new FeedDate();
            $feed.= "        ".htmlspecialchars($now->rfc822())."\n";
            $feed.= "        ".FEEDCREATOR_VERSION."\n";
     
            if($this->image!=null){
                $feed.= "        \n";
                $feed.= "            ".$this->image->url."\n";
                $feed.= "            ".FeedCreator::iTrunc(htmlspecialchars($this->image->title),100)."\n";
                $feed.= "            ".$this->image->link."\n";
                if($this->image->width!=""){
                    $feed.= "            ".$this->image->width."\n";
                }
                if($this->image->height!=""){
                    $feed.= "            ".$this->image->height."\n";
                }
                if($this->image->description!=""){
                    $feed.= "            ".$this->image->getDescription()."\n";
                }
                $feed.= "        \n";
            }
            if($this->language!=""){
                $feed.= "        ".$this->language."\n";
            }
            if($this->copyright!=""){
                $feed.= "        ".FeedCreator::iTrunc(htmlspecialchars($this->copyright),100)."\n";
            }
            if($this->editor!=""){
                $feed.= "        ".FeedCreator::iTrunc(htmlspecialchars($this->editor),100)."\n";
            }
            if($this->webmaster!=""){
                $feed.= "        ".FeedCreator::iTrunc(htmlspecialchars($this->webmaster),100)."\n";
            }
            if($this->pubDate!=""){
                $pubDate=new FeedDate($this->pubDate);
                $feed.= "        ".htmlspecialchars($pubDate->rfc822())."\n";
            }
            if($this->category!=""){
                $feed.= "        ".htmlspecialchars($this->category)."\n";
            }
            if($this->docs!=""){
                $feed.= "        ".FeedCreator::iTrunc(htmlspecialchars($this->docs),500)."\n";
            }
            if($this->ttl!=""){
                $feed.= "        ".htmlspecialchars($this->ttl)."\n";
            }
            if($this->rating!=""){
                $feed.= "        ".FeedCreator::iTrunc(htmlspecialchars($this->rating),500)."\n";
            }
            if($this->skipHours!=""){
                $feed.= "        ".htmlspecialchars($this->skipHours)."\n";
            }
            if($this->skipDays!=""){
                $feed.= "        ".htmlspecialchars($this->skipDays)."\n";
            }
            $feed.= $this->_createAdditionalElements($this->additionalElements,"    ");
     
            for ($i=0;$iitems);$i++){
                $feed.= "        \n";
                $feed.= "            ".FeedCreator::iTrunc(htmlspecialchars(strip_tags($this->items[$i]->title)),100)."\n";
                $feed.= "            ".htmlspecialchars($this->items[$i]->link)."\n";
                $feed.= "            ".$this->items[$i]->getDescription()."\n";
     
                if($this->items[$i]->author!=""){
                    $feed.= "            ".htmlspecialchars($this->items[$i]->author)."\n";
                }
                /*
                 // on hold
                 if($this->items[$i]->source!=""){
                 $feed.= "            ".htmlspecialchars($this->items[$i]->source)."\n";
                 }
                 */
                if($this->items[$i]->category!=""){
                    $feed.= "            ".htmlspecialchars($this->items[$i]->category)."\n";
                }
                if($this->items[$i]->comments!=""){
                    $feed.= "            ".htmlspecialchars($this->items[$i]->comments)."\n";
                }
                if($this->items[$i]->date!=""){
                    $itemDate=new FeedDate($this->items[$i]->date);
                    $feed.= "            ".htmlspecialchars($itemDate->rfc822())."\n";
                }
                if($this->items[$i]->guid!=""){
                    $feed.= "            ".htmlspecialchars($this->items[$i]->guid)."\n";
                }
                $feed.= $this->_createAdditionalElements($this->items[$i]->additionalElements,"        ");
                $feed.= "       
    \n";
            }
            $feed.= "   
    \n";
            $feed.= "
    \n";
            return $feed;
        }
    }
     
    class RSSCreator20 extends RSSCreator091{
     
        function RSSCreator20(){
            parent::_setRSSVersion("2.0");
        }
    }

    使用示例:
    复制代码 代码如下:
    header('Content-Type:text/html; charset=utf-8');
    $db=mysql_connect('127.0.0.1','root','123456');
    mysql_query("set names utf8");
    mysql_select_db('dbname',$db);
    $brs=mysql_query('select * from article order by add_time desc limit 0,10',$db);
    $rss=new UniversalFeedCreator();
    $rss->title="页面标题";
    $rss->link="网址http://";
    $rss->description="rss标题";
    while($rowbrs=mysql_fetch_array($brs)){
        $item=new FeedItem();
        $item->title =$rowbrs['subject'];
        $item->link='http://www.bkjia.com/';
        $item->description =$rowbrs['description'];
        $rss->addItem($item);
    }
    mysql_close($db);
    $rss->saveFeed("RSS2.0","rss.xml");

    希望本文所述对大家的php程序设计有所帮助。

    www.bkjia.comtruehttp://www.bkjia.com/PHPjc/958257.htmlTechArticlephp生成RSS订阅的方法,phprss订阅 本文实例讲述了php生成RSS订阅的方法。分享给大家供大家参考。具体分析如下: RSS(简易信息聚合,也叫...
    本站声明
    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    热AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智能驱动的应用程序,用于创建逼真的裸体照片

    AI Clothes Remover

    AI Clothes Remover

    用于从照片中去除衣服的在线人工智能工具。

    Undress AI Tool

    Undress AI Tool

    免费脱衣服图片

    Clothoff.io

    Clothoff.io

    AI脱衣机

    Video Face Swap

    Video Face Swap

    使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

    热门文章

    <🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
    4 周前 By 尊渡假赌尊渡假赌尊渡假赌
    北端:融合系统,解释
    4 周前 By 尊渡假赌尊渡假赌尊渡假赌
    Mandragora:巫婆树的耳语 - 如何解锁抓钩
    4 周前 By 尊渡假赌尊渡假赌尊渡假赌
    <🎜>掩盖:探险33-如何获得完美的色度催化剂
    2 周前 By 尊渡假赌尊渡假赌尊渡假赌

    热工具

    记事本++7.3.1

    记事本++7.3.1

    好用且免费的代码编辑器

    SublimeText3汉化版

    SublimeText3汉化版

    中文版,非常好用

    禅工作室 13.0.1

    禅工作室 13.0.1

    功能强大的PHP集成开发环境

    Dreamweaver CS6

    Dreamweaver CS6

    视觉化网页开发工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神级代码编辑软件(SublimeText3)

    热门话题

    Java教程
    1677
    14
    CakePHP 教程
    1429
    52
    Laravel 教程
    1333
    25
    PHP教程
    1278
    29
    C# 教程
    1257
    24
    继续使用PHP:耐力的原因 继续使用PHP:耐力的原因 Apr 19, 2025 am 12:23 AM

    PHP仍然流行的原因是其易用性、灵活性和强大的生态系统。1)易用性和简单语法使其成为初学者的首选。2)与web开发紧密结合,处理HTTP请求和数据库交互出色。3)庞大的生态系统提供了丰富的工具和库。4)活跃的社区和开源性质使其适应新需求和技术趋势。

    如果session_start()被多次调用会发生什么? 如果session_start()被多次调用会发生什么? Apr 25, 2025 am 12:06 AM

    多次调用session_start()会导致警告信息和可能的数据覆盖。1)PHP会发出警告,提示session已启动。2)可能导致session数据意外覆盖。3)使用session_status()检查session状态,避免重复调用。

    IIS和PHP的兼容性:深度潜水 IIS和PHP的兼容性:深度潜水 Apr 22, 2025 am 12:01 AM

    IIS和PHP可以兼容,通过FastCGI实现。1.IIS通过配置文件将.php文件请求转发给FastCGI模块。2.FastCGI模块启动PHP进程处理请求,提高性能和稳定性。3.实际应用中需注意配置细节、错误调试和性能优化。

    XML在RSS中的优势:技术深度潜水 XML在RSS中的优势:技术深度潜水 Apr 23, 2025 am 12:02 AM

    XML在RSS中具有结构化数据、可扩展性、跨平台兼容性和解析验证的优势。1)结构化数据确保内容的一致性和可靠性;2)可扩展性允许添加自定义标签以适应内容需求;3)跨平台兼容性使其在不同设备上无缝工作;4)解析和验证工具确保Feed的质量和完整性。

    作曲家:通过AI的帮助开发PHP 作曲家:通过AI的帮助开发PHP Apr 29, 2025 am 12:27 AM

    AI可以帮助优化Composer的使用,具体方法包括:1.依赖管理优化:AI分析依赖关系,建议最佳版本组合,减少冲突。2.自动化代码生成:AI生成符合最佳实践的composer.json文件。3.代码质量提升:AI检测潜在问题,提供优化建议,提高代码质量。这些方法通过机器学习和自然语言处理技术实现,帮助开发者提高效率和代码质量。

    session_start()函数的意义是什么? session_start()函数的意义是什么? May 03, 2025 am 12:18 AM

    session_start()iscucialinphpformanagingusersessions.1)ItInitiateSanewsessionifnoneexists,2)resumesanexistingsessions,and3)setsasesessionCookieforContinuityActinuityAccontinuityAcconActInityAcconActInityAcconAccRequests,EnablingApplicationsApplicationsLikeUseAppericationLikeUseAthenticationalticationaltication and PersersonalizedContentent。

    使用Laravel:使用PHP简化Web开发 使用Laravel:使用PHP简化Web开发 Apr 19, 2025 am 12:18 AM

    Laravel优化Web开发流程的方法包括:1.使用路由系统管理URL结构;2.利用Blade模板引擎简化视图开发;3.通过队列处理耗时任务;4.使用EloquentORM简化数据库操作;5.遵循最佳实践提高代码质量和可维护性。

    超越基础:高级RSS文档功能 超越基础:高级RSS文档功能 Apr 21, 2025 am 12:03 AM

    RSS的高级功能包括内容命名空间、扩展模块和条件订阅。1)内容命名空间扩展RSS功能,2)扩展模块如DublinCore或iTunes添加元数据,3)条件订阅根据特定条件筛选条目。这些功能通过添加XML元素和属性实现,提升信息获取效率。

    See all articles