[ mordor @ 21.04.2005. 14:44 ] @
Oke imam klasu koju koristim za parsovanje xml feedova Code: <?php // classse feedReader //faz a leitura de um feed (rss ou xml) //versão 1.0 para PHP 4 //autor: José Valente mailto:[email protected] //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 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; } 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)){ if(!@xml_parse($this->feedReader,$data,feof($fp))){ $errorDefinition=xml_error_string(xml_get_error_code($this->feedReader)); echo $errorDefinition; } } xml_parser_free($this->feedReader); } function openTag($parser,$name,$attrs){ //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 switch($this->currentTag){ case "title":$this->outputData["channel"][$this->currentTag]=$data;break; case "link":$this->outputData["channel"][$this->currentTag]=$data;break; case "description":$this->outputData["channel"][$this->currentTag]=$data;break; case "language":$this->outputData["channel"][$this->currentTag]=$data;break; case "copyright":$this->outputData["channel"][$this->currentTag]=$data;break; case "docs":$this->outputData["channel"][$this->currentTag]=$data;break; case "lastbuilddate":$this->outputData["channel"][$this->currentTag]=$data;break; } } if($this->itemFlag){ //para a descrição dos items switch($this->currentTag){ case "title":$this->outputData["item"][$this->currentTag][$this->node-1].=$data;break; case "link":$this->outputData["item"][$this->currentTag][$this->node-1]=$data;break; case "description":$this->outputData["item"][$this->currentTag][$this->node-1].=$data;break; case "author":$this->outputData["item"][$this->currentTag][$this->node-1]=$data;break; case "pubdate":$this->outputData["item"][$this->currentTag][$this->node-1]=$data;break; } } if($this->imageFlag){ //para a descrição da imagem switch($this->currentTag){ case "title":$this->outputData["image"][$this->currentTag]=$data;break; case "url":$this->outputData["image"][$this->currentTag]=$data;break; case "link":$this->outputData["image"][$this->currentTag]=$data;break; } } } } ?> Pokusavao sam nesto ovako Code: <?php // classse feedReader //faz a leitura de um feed (rss ou xml) //versão 1.0 para PHP 4 //autor: José Valente mailto:[email protected] //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 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; } 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"); $auth_string = base64_encode("USER:PASS"); $message = "GET ".$this->feedUrl."$path HTTP/1.1\r\n"; $message .= "Host: $domain\r\n"; $message .= "Proxy-authorization: Basic $auth_string\r\n"; $message .= "Connection: Close\r\n"; $message .= "\r\n"; $socket = fsockopen("proxy3.default.co.yu", "8080", $errno, $errstring, 20); fwrite($socket, $message); //$contents = ""; // while (!feof($socket)){ // $contents .= fgets($socket, 128); // } //if(!($fp=@fopen($this->feedUrl,"r"))){ //$errorDefinition="Não foi possível encontrar o ficheiro pretendido."; //echo $errorDefinition; //} while($data=@fread($socket,4096)){ if(!@xml_parse($this->feedReader,$data,feof($socket))){ $errorDefinition=xml_error_string(xml_get_error_code($this->feedReader)); echo $errorDefinition; } } xml_parser_free($this->feedReader); fclose($socket); } function openTag($parser,$name,$attrs){ //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 switch($this->currentTag){ case "title":$this->outputData["channel"][$this->currentTag]=$data;break; case "link":$this->outputData["channel"][$this->currentTag]=$data;break; case "description":$this->outputData["channel"][$this->currentTag]=$data;break; case "language":$this->outputData["channel"][$this->currentTag]=$data;break; case "copyright":$this->outputData["channel"][$this->currentTag]=$data;break; case "docs":$this->outputData["channel"][$this->currentTag]=$data;break; case "lastbuilddate":$this->outputData["channel"][$this->currentTag]=$data;break; } } if($this->itemFlag){ //para a descrição dos items switch($this->currentTag){ case "title":$this->outputData["item"][$this->currentTag][$this->node-1].=$data;break; case "link":$this->outputData["item"][$this->currentTag][$this->node-1]=$data;break; case "description":$this->outputData["item"][$this->currentTag][$this->node-1].=$data;break; case "author":$this->outputData["item"][$this->currentTag][$this->node-1]=$data;break; case "pubdate":$this->outputData["item"][$this->currentTag][$this->node-1]=$data;break; } } if($this->imageFlag){ //para a descrição da imagem switch($this->currentTag){ case "title":$this->outputData["image"][$this->currentTag]=$data;break; case "url":$this->outputData["image"][$this->currentTag]=$data;break; case "link":$this->outputData["image"][$this->currentTag]=$data;break; } } } } ?> I ne znam sta vise :( moze li neko da pomogne ? Dakle hocu da odradim sve preko nekog proxija koji zahteva autentikaciju. |