poszukiwałem klasy do obsługi XML'a z kursami walut z NBP i w końcu napisałem sam, może komuś się przyda
<?php /** * Pobieranie kursów walut z NBP * * Klasa do obsługi plików xml z kursami walut udostępnianych przez NBP * * @author Bartłomiej Staniszczak <b_staniszczak at tlen dot pl> * @copyright 2007 Bartłomiej Staniszczak * @version 1.0 * */ class WalutyNBP { /** * Tablica z wszystkimi kursami zczytanymi z XML * * @var array */ /** * Zmienna zawierająca datę aktualizacji kursów * * @var string */ private $strData; /** * Konstruktor parsuje xml'a do tablicy * * @param string $strEncoding * @param string $strUrlXml */ public function __construct($strEncoding='UTF-8',$strUrlXml='http://www.nbp.pl/Kursy/xml/'){ $strUrlXml=$strUrlXml.$this->aktualny_xml().'.xml'; $objXml = new XMLReader(); if(function_exists('curl_init')){ $objXml->XML($this->ccurl_fopen($strUrlXml)); } else{ $objXml->open($strUrlXml); } $j=0; while($objXml->read()){ if($objXml->name === 'data_publikacji' && $objXml->nodeType==1){ $objXml->read(); $this->strData=$objXml->value; } if($objXml->depth==3){ if($j==4){ $j=0; $this -> arrKursy[$arrWaluta[2]]=$arrWaluta; } if($strEncoding!='ISO-8859-2'){ $arrWaluta[$j]=iconv('ISO-8859-2',$strEncoding,$objXml->value); } else{ $arrWaluta[$j]=$objXml->value; } $j++; } } } /** * Otwieranie pliku * * Metoda otwiera plik i zwraca jego zawartość * * @param string $strUrl * @return mixed */ private function ccurl_fopen ($strUrl){ $strUser_agent = "Mozilla/8.0 (Windows 2008 SP32 + 3patch)"; $resCh = curl_init(); curl_setopt ($resCh, CURLOPT_URL, $strUrl); curl_setopt ($resCh, CURLOPT_USERAGENT, $strUser_agent); curl_setopt ($resCh, CURLOPT_COOKIEJAR, "cookie.txt"); curl_setopt ($resCh, CURLOPT_HEADER, 0); curl_setopt ($resCh, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($resCh, CURLOPT_FOLLOWLOCATION, 1); curl_setopt ($resCh, CURLOPT_TIMEOUT, 120); $mixResult = curl_exec ($resCh); curl_close($resCh); return $mixResult; } /** * Aktualna nazwa pliku XML z danymi * * @param string $strTabela * @return string */ private function aktualny_xml($strTabela='a'){ if(function_exists('curl_init')){ $resLista = $this->ccurl_fopen('http://www.nbp.pl//Kursy/xml/dir.txt'); } elseif(!function_exists('fsockopen') || !function_exists('fputs') || !function_exists('feof') || !function_exists('fgets')){ $strHeaders = 'GET /Kursy/xml/dir.txt HTTP/1.0' . "rn"; $strHeaders .= 'Host: www.nbp.pl' . "rn"; $strHeaders .= 'User-Agent: Mozilla/8.0 (Windows; U; Windows NT 5.1; pl-PL; rv:1.7.10) Gecko/20050717 Firefox/1.0.6' . "rnrn"; } } for($i=0; $i<=3; $i++){ } } return $strDzisiejszyXML; } /** * Zwraca wybrane waluty * * Metoda zwraca informacje o podanych w parametrze walutach * * @param mixed $mixWaluty * @return array */ return $this->arrKursy; } return $this->arrKursy[$mixWaluty]; return FALSE; } else{ foreach($this->arrKursy AS $strKlucz => $arrWartosc){ $arrWynikowa[$strKlucz]=$this->arrKursy[$strKlucz]; } return $arrWynikowa; return FALSE; } return FALSE; } /** * Data aktualizacji kursów * * @return string */ public function getData(){ return $this->strData; } } ?>
przykładowe użycie:
<?php $kursy = new WalutyNBP(); $waluta = $kursy -> zwroc_waluty('USD'); ?>
wynik:
Cytat
Array ( [0] => dolar amerykański [1] => 1 [2] => USD [3] => 2,8020 )
<?php $kursy = new WalutyNBP(); ?>
wynik:
Cytat
2007-05-22
Array ( [USD] => Array ( [0] => dolar amerykański [1] => 1 [2] => USD [3] => 2,8020 ) [EUR] => Array ( [0] => euro [1] => 1 [2] => EUR [3] => 3,7735 ) )
Array ( [USD] => Array ( [0] => dolar amerykański [1] => 1 [2] => USD [3] => 2,8020 ) [EUR] => Array ( [0] => euro [1] => 1 [2] => EUR [3] => 3,7735 ) )