>백엔드 개발 >PHP 튜토리얼 >php_php 팁에서 RSS 구독을 생성하는 방법

php_php 팁에서 RSS 구독을 생성하는 방법

WBOY
WBOY원래의
2016-05-16 20:23:141077검색

이 기사의 예에서는 PHP에서 RSS 구독을 생성하는 방법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 분석은 다음과 같습니다.

RSS(Really Simple Syndication, 신디케이션이라고도 함)는 웹사이트 콘텐츠를 설명하고 동기화하기 위한 형식입니다. RSS는 다음 세 가지 해석 중 하나일 수 있습니다. RDF(자원 설명 프레임워크) 사이트 요약. 그러나 사실 이 세 가지 설명은 모두 동일한 신디케이션 기술을 의미합니다. RSS는 현재 온라인 뉴스 채널, 블로그, 위키에서 널리 사용되고 있습니다. RSS 구독을 사용하면 웹사이트에서 RSS 출력을 제공하여 사용자가 웹사이트 콘텐츠의 최신 업데이트를 얻는 데 도움이 됩니다. 네트워크 사용자는 클라이언트에서 RSS를 지원하는 집계 도구 소프트웨어를 사용하여 웹 사이트 콘텐츠 페이지를 열지 않고도 RSS 출력을 지원하는 웹 사이트 콘텐츠를 읽을 수 있습니다.
기술적으로 말하면 RSS 파일은 일반적으로 접미사로 rss, xml 또는 rdf를 갖는 표준화된 XML 데이터입니다.

코드 복사 코드는 다음과 같습니다.

스크립트 홈 <링크>http://www.jb51.net/ <설명>스크립트 홈
RSS 튜토리얼
웹사이트 주소/rss W3School의 새로운 RSS 튜토리얼

XML 튜토리얼
웹사이트 주소/xml W3School의 새로운 XML 튜토리얼




다음은 PHP를 사용하여 RSS를 동적으로 생성하는 코드 예제입니다.




코드 복사

코드는 다음과 같습니다.

/**
** PHP는 RSS 클래스를 동적으로 생성합니다
**/
정의("TIME_ZONE","");
Define("FEEDCREATOR_VERSION","www.jb51.net");//您的网址
FeedItem 클래스는 HtmlDescribeable을 확장합니다.{
    var $title,$description,$link;
    var $author,$authorEmail,$image,$category,$comments,$guid,$source,$creator;
    var $날짜;
    var $additionalElements=Array();
}
 
FeedImage 클래스는 HtmlDescribeable을 확장합니다{
    var $title,$url,$link;
    var $width,$height,$description;
}
 
클래스 HtmlDescribeable{
    var $descriptionHtmlSyndicated;
    var $descriptionTruncSize;
 
    함수 getDescription(){
        $descriptionField=new FeedHtmlField($this->description);
        $descriptionField->syndicateHtml=$this->descriptionHtmlSyndicated;
        $descriptionField->truncSize=$this->descriptionTruncSize;
        return $descriptionField->output();
    }
}
 
클래스 FeedHtmlField{
    var $rawFieldContent;
    var $truncSize,$syndicateHtml;
    함수 FeedHtmlField($parFieldContent){
        if($parFieldContent){
            $this->rawFieldContent=$parFieldContent;
        }
    }
    함수 출력(){
        if(!$this->rawFieldContent){
            $결과="";
        }    elseif($this->syndicateHtml){
            $result="rawFieldContent."]]>";
        }그밖에{
            if($this->truncSize 및 is_int($this->truncSize)){
                $result=FeedCreator::iTrunc(htmlspecialchars($this->rawFieldContent),$this->truncSize);
            }그밖에{
                $result=htmlspecialchars($this->rawFieldContent);
            }
        }
        $결과를 반환합니다.
    }
}
 
클래스 UniversalFeedCreator는 FeedCreator를 확장합니다{
    var $_feed;
    함수 _setFormat($format){
        스위치(strtoupper($format)){
            케이스 "2.0":
                // 넘어지다
            케이스 "RSS2.0":
                $this->_feed=new RSSCreator20();
                부서지다;
            케이스 "0.91":
                // 넘어지다
            케이스 "RSS0.91":
                $this->_feed=new RSSCreator091();
                부서지다;
            기본값:
                $this->_feed=new RSSCreator091();
                부서지다;
        }
        $vars=get_object_vars($this);
        foreach($vars를 $key => $value로){
            // "contentType","encoding" 속성 덮어쓰기를 방지합니다. "_feed" 자체를 복사하지 마세요
            if(!in_array($key, array("_feed","contentType","encoding"))){
                $this->_feed->{$key}=$this->{$key};
            }
        }
    }
 
    함수 createFeed($format="RSS0.91"){
        $this->_setFormat($format);
        return $this->_feed->createFeed();
    }
 
    함수 saveFeed($format="RSS0.91",$filename="",$displayContents=true){
        $this->_setFormat($format);
        $this->_feed->saveFeed($filename,$displayContents);
    }
 
    함수 useCached($format="RSS0.91",$filename="",$timeout=3600){
        $this->_setFormat($format);
        $this->_feed->useCached($filename,$timeout);
    }
}
 
FeedCreator 클래스는 HtmlDescribeable을 확장합니다{
    var $title,$description,$link;
    var $syndicationURL,$image,$언어,$copyright,$pubDate,$lastBuildDate,$editor,$editorEmail,$webmaster,$category,$docs,$ttl,$rated,$skipHours,$skipDays;
    var $xslStyleSheet="";
    var $items=배열();
    var $contentType="application/xml";
    var $encoding="utf-8";
    var $additionalElements=Array();
 
    함수 addItem($item){
        $this->항목[]=$item;
    }
 
    함수clearItem2Null(){
        $this->items=array();
    }
 
    함수 iTrunc($string,$length){
        if(strlen($string)<=$length){
            $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)." ...";
    }
 
    함수 _createGeneratorComment(){
        return "n";
    }
 
    함수 _createAdditionalElements($elements,$indentString=""){
        $ae="";
        if(is_array($elements)){
            foreach($elements AS $key => $value){
                $ae.= $indentString."<$key>$valuen";
            }
        }
        $ae를 반환;
    }
 
    함수 _createStylesheetReferences(){
        $xml="";
        if($this->cssStyleSheet) $xml .= "cssStyleSheet."" type="text/css"?>n";
        if($this->xslStyleSheet) $xml .= "xslStyleSheet."" type="text/xsl"?>n";
        $xml을 반환합니다.
    }
 
    함수 createFeed(){}
 
    함수 _generateFilename(){
        $fileInfo=경로정보($_SERVER["PHP_SELF"]);
        return substr($fileInfo["basename"],0,-(strlen($fileInfo["extension"]) 1)).".xml";
    }
 
    함수 _redirect($filename){
        Header("Content-Type: ".$this->contentType."; charset=".$this->encoding."; filename=".basename($filename));
        Header("콘텐츠 처리: 인라인; filename=".basename($filename));
        readfile($파일명,"r");
        주사위();
    }
 
    함수 useCached($filename="",$timeout=3600){
        $this->_timeout=$timeout;
        if($filename==""){
            $filename=$this->_generate파일명();
        }
        if(file_exists($filename) && (time()-filemtime($filename) < $timeout)){
            $this->_redirect($filename);
        }
    }
 
    함수 saveFeed($filename="",$displayContents=true){
        if($filename==""){
            $filename=$this->_generate파일명();
        }
        $feedFile=fopen($filename,"w");
        if($feedFile){
            fputs($feedFile,$this->createFeed());
            fclose($feedFile);
            if($displayContents){
                $this->_redirect($filename);
            }
        }그밖에{
            echo "
피드 파일을 생성하는 중에 오류가 발생했습니다. 쓰기 권한을 확인하세요.
";
        }
    }
}
 
클래스 FeedDate{
    var $유닉스;
    함수 FeedDate($dateString=""){
        if($dateString=="") $dateString=date("r");
        if(is_integer($dateString)){
            $this->unix=$dateString;
            반품;
        }
        if(preg_match("~(?:(?:월|화|수|목|금|토|일),\s )?(\d{1,2})\s ([a-zA-Z] {3})\s (\d{4})\s (\d{2}):(\d{2}):(\d{2})\s (.*)~",$dateString, $일치)){
            $months=Array("1월"=>1,"2월"=>2,"3월"=>3,"4월"=>4,"5월"=>5,"6월"=> ;6,"7월"=>7,"8월"=>8,"9월"=>9,"10월"=>10,"11월"=>11,"12월"=>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;
            }그밖에{
                if(strlen($matches[7])==1){
                    $1시간=3600;
                    $ord=ord($matches[7]);
                    if($ord < ord("M")){
                        $tzOffset=(ord("A") - $ord - 1) * $oneHour;
                    } elseif($ord >= ord("M") && $matches[7]!="Z"){
                        $tzOffset=($ord - ord("M")) * $oneHour;
                    } elseif($matches[7]=="Z"){
                        $tz오프셋=0;
                    }
                }
                스위치 ($matches[7]){
                    케이스 "UT":
                    케이스 "GMT":    $tzOffset=0;
                }
            }
            $this->unix = $tzOffset;
            반품;
        }
        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;
            }그밖에{
                if($matches[7]=="Z"){
                    $tz오프셋=0;
                }
            }
            $this->unix = $tzOffset;
            반품;
        }
        $this->유닉스=0;
    }
 
    함수 rfc822(){
        $date=gmdate("연월일 H:i:s",$this->unix);
        if(TIME_ZONE!="") $date .= " ".str_replace(":","",TIME_ZONE);
        $date를 반환합니다.
    }
 
    기능 iso8601(){
        $date=gmdate("연월일 H:i:s",$this->unix);
        $date=substr($date,0,22) . ':' . substr($date,-2);
        if(TIME_ZONE!="") $date=str_replace(" 00:00",TIME_ZONE,$date);
        $date를 반환합니다.
    }
 
    함수 유닉스(){
        $this->unix를 반환합니다.
    }
}
 
클래스 RSSCreator10은 FeedCreator를 확장합니다.{
    함수 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=새 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.= "        게시n";
            $feed.= "        text/htmln";
            if($this->items[$i]->date!=null){
                $itemDate=new FeedDate($this->항목[$i]->날짜);
                $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,"nr","  ")))."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";
        $feed를 반환합니다.
    }
}
 
클래스 RSSCreator091은 FeedCreator를 확장합니다{
    var $RSSVersion;
 
    기능 RSSCreator091(){
        $this->_setRSSVersion("0.91");
        $this->contentType="응용 프로그램/rss xml";
    }
 
    함수 _setRSSVersion($version){
        $this->RSSVersion=$버전;
    }
 
    함수 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=새 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->이미지->너비."n";
            }
            if($this->image->height!=""){
                $feed.= "            ".$this->image->height."n";
            }
            if($this->image->description!=""){
                $feed.= "            ".$this->image->getDescription()."n";
            }
            $feed.= "        n";
        }
        if($this->언어!=""){
            $feed.= "        <언어>".$this->언어."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->ating!=""){
            $feed.= "        <등급>".FeedCreator::iTrunc(htmlspecialchars($this->ating),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";
            }
            /*
             // 보류
             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->항목[$i]->날짜);
                $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";
        $feed를 반환합니다.
    }
}
 
클래스 RSSCreator20은 RSSCreator091을 확장합니다{
 
    기능 RSSCreator20(){
        parent::_setRSSVersion("2.0");
    }
}

使用示例:
复代码 代码如下:
header('Content-Type:text/html; charset=utf-8')
$db=mysql_connect('127.0.0.1','루트','123456')
mysql_query("utf8 이름 설정"); mysql_select_db('dbname',$db)
$brs=mysql_query('add_time 설명 제한 0,10에 따른 기사 순서에서 * 선택',$db)
$rss=새로운 UniversalFeedCreator()
$rss->title="페이지 제목"
$rss->link="웹사이트 http://"
$rss->description="rss 제목"
while($rowbrs=mysql_fetch_array($brs)){
$item=새 피드항목()
$item->제목 =$rowbrs['주제']
$item->link='http://www.jb51.net/'
$item->설명 =$rowbrs['설명']
$rss->addItem($item)
}
mysql_close($db)
$rss->saveFeed("RSS2.0","rss.xml");
이 기사가 모든 사람의 PHP 프로그래밍 설계에 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.