# زبان های اسکریپتی > PHP > Zend Framework >  ساخت برنامه rss reader با php

## Mostafa_G2

سلام دوستان
من این ترم پروژه دارم و وقتی رفتم پیش استاد تا ببینم چکار باید بکنم , گفت باید یه rss reader با زبان php بنویسم (مثل google reader) , ولی من حتی نمیدونم rss چی هست , تا اینکه بخوام یه rss reader بنویسیم
هیچ منبعی هم پیدا نکرم که بهم کمک کنه , اصلا نمیدونم چی باید بنویسم , هر چقدر هم استادموون گفتم که پروژه رو عوض کنه , عوض نکرد , جان من بهم کمک کنید , ترم آخر هستم .
ممنون

----------


## ...!M.J!...

سلام البته فک کنم جای پستت اینجا نباشه اینجا احتمالا دیر تر بجواب میرسی
خلاصه اصلا نگران نباش اصلا کار سختی قرار نیست انجام بدی یه سرچ تو سایت phpclases بزن یه عالمه واست کلاس نوشته شده میاد :لبخند گشاده!:  بیا اینم نمونش که خیلی عالی نوشته شده بنظر من(نت خودم از همین استفاده میکنم):
1:) feedReader

<?php
// classe feedReader
//faz a leitura de um feed (rss ou xml)
//versمo 2 para PHP 4
//autor: José Valente mailto:jcvalente@netvisao.pt
//2004 Portugal

class feedReader{

var $feedReader;   // parser
var $feedUrl;      // url do ficheiro xml/rss
var $node;         // nْmero de nَs dos items
var $channelFlag;  // flag
var $currentTag;   // actual tag
var $outputData;   // array dos dados (notيcias formatadas)
var $itemFlag;     // flag
var $imageFlag;    // flag
var $feedVersion;  // versمo do ficheiro rss

function feedReader(){ //constructor iniciaçمo dos valores por defeitos dos elementos da classe
    $this->feedReader="";
    $this->feedUrl="";
    $this->node=0;
    $this->channelFlag=false;
    $this->currentTag="";
    $this->outputData=array();
    $this->itemFlag=false;
    $this->imageFlag=false;
    $this->feedVersion="";
}

function setFeedUrl($url){ //indicamos o endereço do ficheiro xml/rss
    $this->feedUrl=$url;
}

function getFeedOutputData(){ //retornamos o array com as notيcias formatadas
    return $this->outputData;
}

function getFeedNumberOfNodes(){ //retornamos o nْmero de notيcias
    return $this->node;
}

function parseFeed(){ //funçمo parse do xml
    $this->feedReader=xml_parser_create();
    xml_set_object($this->feedReader,$this);
    xml_parser_set_option($this->feedReader,XML_OPTION_CASE_FOLDING,true);
    xml_set_element_handler($this->feedReader,"openTag","closeTag");
    xml_set_character_data_handler($this->feedReader,"dataHandling");
    if(!($fp=@fopen($this->feedUrl,"r"))){
        $errorDefinition="Nمo foi possيvel encontrar o ficheiro pretendido.";
        echo $errorDefinition;
    }
    while($data=@fread($fp,4096)){
        //$data=utf8_encode($data);//para eliminar um erro, em que eliminava toda a string antes do ْltimo "&"
        if(!@xml_parse($this->feedReader,$data,feof($fp))){
            $errorDefinition=xml_error_string(xml_get_error_co  de($this->feedReader));
            echo $errorDefinition;
        }
    }
    xml_parser_free($this->feedReader);
}

function openTag(&$parser,&$name,&$attribs){ //funçمo startElement
        if($name){
            switch(strtolower($name)){
                case "channel":$this->channelFlag=true;break;
                case "image":$this->channelFlag=false;$this->imageFlag=true;break;
                case "item":$this->channelFlag=false;$this->imageFlag=false;$this->itemFlag=true;$this->node++;break;
                default:$this->currentTag=strtolower($name);break;
            }
        }
}

function closeTag(&$parser,&$name){ //funçمo endElement
    $this->currentTag="";
}

function dataHandling(&$parser,&$data){ //funçمo characterElement
    if($this->channelFlag){ //para a descriçمo do channel
        if(isset($this->outputData["channel"][$this->currentTag])){
            $this->outputData["channel"][$this->currentTag].=$data;
        }else{
            $this->outputData["channel"][$this->currentTag]=$data;
        }
        
    }
    if($this->itemFlag){ //para a descriçمo dos items
        if(isset($this->outputData["item"][$this->currentTag][$this->node-1])){
            $this->outputData["item"][$this->currentTag][$this->node-1].=$data;
        }else{
            $this->outputData["item"][$this->currentTag][$this->node-1]=$data;
        }
        //reconversمo
    }
    if($this->imageFlag){ //para a descriçمo da imagem
        if(isset($this->outputData["image"][$this->currentTag])){
            $this->outputData["image"][$this->currentTag].=$data;
        }else{
            $this->outputData["image"][$this->currentTag]=$data;
        }
        
    }
}

}
?>


2-) RSSReader

<?php
//versمo 2 para PHP 4
//autor: José Valente mailto:jcvalente@netvisao.pt
//2005 Portugal
include("feedReader.inc.php");

class RSSReader extends feedReader{

var $data;

function RSSReader($url){
    $this->setFeedUrl($url);
    $this->parseFeed();
    $this->data = $this->getFeedOutputData();
}

//********************* CHANNEL **********************************
function getChannelTitle($class=""){
    $html = "<a ";
    if(isset($class)){
        $html .= "class=\"".$class."\" ";
    }
    $html .= "href=\"".$this->data['channel']['link']."\" target=\"_blank\">";
    $html .= $this->data['channel']['title'];
    $html .= "</a>";
    return $html;
}

function getChannelDescription($class=""){
    $html = "<span ";
    if(isset($class)){
        $html .= "class=\"".$class."\" ";
    }
    $html .= ">".$this->data['channel']['description'];
    $html .= "</span>";
    return $html;
}

function getChannelCopyright($class=""){
    if(isset($this->data['channel']['copyright'])){
        $html = "<span ";
        if(isset($class)){
            $html .= "class=\"".$class."\" ";
        }
        $html .= ">".$this->data['channel']['copyright'];
        $html .= "</span>";
        return $html;
    }
}

function getChannelLanguage($class=""){
    if(isset($this->data['channel']['language'])){
        $html = "<span ";
        if(isset($class)){
            $html .= "class=\"".$class."\" ";
        }
        $html .= ">".$this->data['channel']['language'];
        $html .= "</span>";
        return $html;
    }
}
//********************* IMAGE *****************************
function getImage(){
    if(isset($this->data['image']['link'])){
        $html = "<a href=\"".$this->data['image']['link']."\" target=\"_blank\">";
        $html .= "<img border=\"0\" ";
        if(isset($this->data['image']['height'])){
            $html .= "height=\"".$this->data['image']['height']."\" ";
        }
        if(isset($this->data['image']['width'])){
            $html .= "width=\"".$this->data['image']['width']."\" ";
        }
        $html .= "src=\"".$this->data['image']['url']."\" title=\"".$this->data['image']['title']."\" />";
        $html .= "</a>";
        return $html;
    }
}
//*********************** ITEM ****************************
function getItemTitle($class="",$item){
    $html = "<a ";
    if(isset($class)){
        $html .= "class=\"".$class."\" ";
    }
    $html .= "href=\"".$this->data['item']['link'][$item]."\" target=\"_blank\">";
    $html .= $this->data['item']['title'][$item];
    $html .= "</a>";
    return $html;
}

function getItemDescription($class="",$item){
    if(isset($this->data['item']['description'][$item])){
        $html = "<span ";
        if(isset($class)){
            $html .= "class=\"".$class."\" ";
        }
        $html .= ">".str_replace ("</pre>", "</p>", str_replace ("<pre>", "<p>", html_entity_decode($this->data['item']['description'][$item])));
        //tag <pre> change the attribute with in a cell in table
        $html .= "</span>";
        return $html;
    }
}

function getItemPubdate($class="",$item){
    if(isset($this->data['item']['pubdate'][$item])){
        $html = "<span ";
        if(isset($class)){
            $html .= "class=\"".$class."\" ";
        }
        $html .= ">".$this->data['item']['pubdate'][$item];
        $html .= "</span>";
        return $html;
    }
}

function getNumberOfNews(){
    return $this->getFeedNumberOfNodes();
}

}
?>


3-) نحوه استفاده مثال:


<ul id=rss>
<?php 
include("includes/RSSReader.inc.php");
$rss = new RSSReader("http://yorsite/rss.aspx?id=0&Lang=fa");
$nn = $rss->getNumberOfNews();
 for($i=0;$i<$nn;$i++){?>
<li><?php echo $rss->getItemTitle("rsslink",$i);?></li>
 <?php }?>
           </ul>



امیدوارم منظورت همین باشه و تونسته باشم کمکت کنم

----------


## Mostafa_G2

ممنون از شما دوست عزیز
شرمنده که تاپیک رو اینجا زدم
یه تستش میکنم و جوابش رو بهتوون میدم
راستی من میخوام صفحات به صورت گرافیکی باشند(مثل google reader) باید با جاوا اسکریپت این کار رو بکنم ولی من جاوا اسکریپت بلد نیستم , اگه یه منبع فارسی خوب باشه تا ساخت صفحات گرافیکی به خصوص ساخت پنل و ساخت تب پیج و .. به صورت گرافیکی رو یاد بده عالی میشه
باز ممنون از زحمتاتوون

----------


## Mostafa_G2

دروووووووووووووووود
از کد اولی استفاده کردم error داد

*Parse error*:  syntax error, unexpected T_STRING in *G:\web\RSSReader.inc.php* on line *57*

مشکل چیه؟؟؟؟؟؟؟؟

----------

