PDA

View Full Version : ساخت برنامه rss reader با php



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

...!M.J!...
پنج شنبه 21 مهر 1390, 19:16 عصر
سلام البته فک کنم جای پستت اینجا نباشه اینجا احتمالا دیر تر بجواب میرسی
خلاصه اصلا نگران نباش اصلا کار سختی قرار نیست انجام بدی یه سرچ تو سایت 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
یک شنبه 24 مهر 1390, 20:59 عصر
ممنون از شما دوست عزیز
شرمنده که تاپیک رو اینجا زدم
یه تستش میکنم و جوابش رو بهتوون میدم
راستی من میخوام صفحات به صورت گرافیکی باشند(مثل google reader) باید با جاوا اسکریپت این کار رو بکنم ولی من جاوا اسکریپت بلد نیستم , اگه یه منبع فارسی خوب باشه تا ساخت صفحات گرافیکی به خصوص ساخت پنل و ساخت تب پیج و .. به صورت گرافیکی رو یاد بده عالی میشه
باز ممنون از زحمتاتوون

Mostafa_G2
یک شنبه 24 مهر 1390, 21:18 عصر
دروووووووووووووووود
از کد اولی استفاده کردم error داد


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

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