![]() |
![]() ![]() |
![]() |
-hack_w- |
![]()
Post
#1
|
Goście ![]() |
Witam
Jak zmienić ten kod aby poprawnie działał Kod <?php /* +--------------------------------------------------+ | Author: Allan Irvine <ai@ayrsoft.com> | +--------------------------------------------------+ | Date: WED 03 MARCH 2004 | +--------------------------------------------------+ | Origin: Scotland, United kingdom | +--------------------------------------------------+ | Script: newsReader.php | +--------------------------------------------------+ | No License | | free to use for personal and commercial purposes | +--------------------------------------------------+ */ //+++++++++++++++++++++++++++++++++++++++++++++++++++ // CHANGES //--------------------------------------------------- // Added a property $ampReplace, this is a quick fix // it is used to replace ampersands bfore php get a hold of // the rss file, and replace it once php has dealt with it // I was getting lines split by an ampersand, pointed out by // Mathew Clark of Divergent Systems, cheers. // I will need to address this later on as I deem this fix // as a bit of a kludge, not nice. // Allan Irvine <airvine@ayrsoft.com> // 29th April 2004 //---------------------------------------------------- // //++++++++++++++++++++++++++++++++++++++++++++++++++++ class newsReader{ var $content = array(); var $openTag = array(); var $closeTag = array(); var $currentTag; var $rss; var $level; var $startCollecting; var $wantedElements; var $cacheData; var $ampReplace; function newsReader(){ $this->rss = xml_parser_create(); xml_set_object($this->rss, $this); xml_parser_set_option($this->rss,XML_OPTION_CASE_FOLDING,1); xml_set_element_handler($this->rss,_startElement,_endElement); xml_set_character_data_handler($this->rss,_parseData); $this->wantedElements['CHANNEL'] = array("TITLE","DESCRIPTION","LINK","IMAGES"); $this->wantedElements['IMAGE'] = array("URL"); $this->wantedElements['ITEM'] = array("TITLE","DESCRIPTION","LINK"); } function _findLevel($n){ if(eregi("(CHANNEL)|(IMAGE)|(ITEM)",$n,$regs)){ $this->level = $regs[0]; } } function _startToCollect($n){ $this->startCollecting = (in_array($n,$this->wantedElements[$this->level]))?1:0; } function _startElement($t,$name,$attribs){ $this->currentTag = $name; $this->_findLevel($name); $this->_startToCollect($name); if($this->startCollecting){ $this->openTag[]="<tr><td>\n"; } } function _endElement($t,$name){ if($this->startCollecting) $this->closeTag[]="</td></tr>\n"; } function _parseData($t,$cData){ $cData = str_replace($this->ampReplace,"&",$cData);// quick fix, will need to address later on if(strlen(trim($cData))&&($this->startCollecting)){ if(eregi("link",$this->currentTag)){ $this->content[]="<A HREF=\"".$cData."\" TARGET=\"_BLANK\">".$cData."</A>\n"; }elseif(eregi("url",$this->currentTag)){ $this->content[]="<IMG SRC=\"".$cData."\">\n"; }else{ $this->content[]=$cData; } } } function readNewsFeed($source){ $this->_readCacheData(); if($this->_useCache($source)){ $this->_writeCacheEntry($source); $file = file("newsCache/".md5($source)); }else{ $file = file($source); } $file = implode("\n",$file); $this->ampReplace = md5(time());// quick fix, will need to address later on $file = str_replace("&",$this->ampReplace,$file);// quick fix, will need to address later on if(!xml_parse($this->rss,$file,1)){ $ln = xml_get_current_line_number($this->rss); $msg = xml_error_string(xml_get_error_code($this->rss)); return ("An XML error occurred on line $ln: $msg"); }else{ $rtn = "<TABLE border=0>\n"; for($i=0;$i<count($this->openTag);$i++){ $rtn.= $this->openTag[$i].$this->content[$i].$this->closeTag[$i]; } $rtn.="</TABLE>\n"; if(!$this->_useCache($source)){ $this->_writeCacheEntry($source); } return $rtn; } } function _checkCacheDir(){ if(!is_dir("newsCache")){ mkdir("newsCache"); } } function _readCacheData(){ $file = file("newsCache/newsReaderCache.php"); if(strlen(trim($file[0]))){ $this->cacheData = unserialize($file[0]); } } function _useCache($source){ if($key = array_search($source,$this->cacheData)){ $sec = explode(" ",$key); if((time() - $sec[1])>(3600)){ return 0; }else{ return 1; } }else{ return 0; } } function _writeCacheEntry($source){ $this->_checkCacheDir(); $this->_updateCacheArray($source); $fp = fopen("newsCache/newsReaderCache.php","w"); fwrite($fp,serialize($this->cacheData)); fclose($fp); $data = file($source); $data = implode("\n",$data); $fp = fopen("newsCache/".md5($source),"w"); fwrite($fp,$data); fclose($fp); } function _updateCacheArray($source){ if(is_array($this->cacheData) && in_array($source,$this->cacheData)){ foreach($this->cacheData as $key=>$val){ if(trim($val) == trim($source)){ $key =microtime(); } $new[$key]= $val; } $this->cacheData = $new; }else{ $this->cacheData[microtime()] = $source; } } } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ //\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // test data below once you are happy how it works just remove this stuff //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //bbc news stories $newsSources['AA'] ['<input type=text name=imie>']="$imie"; ?> <style type=text/css><!-- td { font-family:arial,verdana,tahoma; font-size:12px; background-color:#f0f0f0; color:#000000; } --></style> <?php foreach($newsSources as $name=>$array){ echo $name; echo "<form method=post action=".$_SERVER['PHP_SELF'].">\n"; echo "<select name=source>\n"; foreach($array as $key=>$val){ $sel = ($val == $source)? " SELECTED " : ""; echo "<option $sel value=$val>$key\n"; } echo "</select>\n"; echo "<input type=submit name=go value=Go>\n"; echo "</form>\n"; } //++++++++++++++++ // script usage | //++++++++++++++++ #$source = "http://www.newscientist.com/syndication/news.rdf"; #$go = 1; if($go){ $feed = new newsReader; echo $feed->readNewsFeed($source); } ?> Jest to kod czytnika rss online. Problem polega na tym że: 1.By wyświetlić kanał trzeba dwa razy przycisnąć „GO” 2.Obok miejsca na wpisanie adresu kanału jest przycisk do listy, którego nie powinno być 3.Nad wiadomościami rss wyswietla się jakiś komunikat: Warning: in_array(): Wrong datatype for second argument in /home/users/webmasts_rss/www/newsReader.php on line 66 Przykład możecie znaleźć tutaj http://www.rss.webmasts.avx.pl/newsReader.php |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 06:11 |