Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V  < 1 2  
Reply to this topicStart new topic
> waluty z NBP, klasa, php5
dg2001
post
Post #21





Grupa: Zarejestrowani
Postów: 71
Pomógł: 12
Dołączył: 9.01.2008
Skąd: Olkusz

Ostrzeżenie: (0%)
-----


Witam, chciałem spróbować użyć powyższej klasy do pobierania walut z NBP z poprawkami wprowadzonymi przez SOLDI, jednak dostaję następujący komunikat błędu:

Warning: XMLReader::read() [xmlreader.read]: /home/jarkal/public_html/test/:11: parser error : Opening and ending tag mismatch: META line 0 and HEAD in public_html/test/conf/funkcje.php on line 87

Warning: XMLReader::read() [xmlreader.read]: </HEAD><BODY><TABLE width=500 border=0 cellspacing=10><TR><TD> in public_html/test/conf/funkcje.php on line 87

Warning: XMLReader::read() [xmlreader.read]: ^ in public_html/test/conf/funkcje.php on line 87

Warning: XMLReader::read() [xmlreader.read]: An Error Occured while reading in public_html/test/conf/funkcje.php on line 87

Poniżej skrypt od linijki 87 do 106.
Kod
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;
                       $arrWaluta=array();
                   }
                   if($strEncoding!='ISO-8859-2'){
                       $arrWaluta[$j]=iconv('ISO-8859-2',$strEncoding,$objXml->value);
                   }
                   else{
                       $arrWaluta[$j]=$objXml->value;
                   }
                   $j++;
               }
           }


Zauważyłem jeszcze że czasem skrypt zadziała a czasem nie. Czy wina leży po stronie mojego serwera, czy coś z klasą czy NBP? Proszę o info.
Go to the top of the page
+Quote Post
okitoki
post
Post #22





Grupa: Zarejestrowani
Postów: 214
Pomógł: 18
Dołączył: 25.04.2009

Ostrzeżenie: (20%)
X----


ja to tak rozwiązałem

Kod
<?php


class cWaluta
{
    public $dane = nill; // dane xmla
    public $numer = ""; // numer notowa..
    public $data  = ""; // data notowa..
    public $waluta = 'PLN';
    public $lista = array();
    private $znazwy = array('USD'=>'dolar ameryka..ski','HUF'=>'forint (W..gry)','DKK'=>'korona du..ska','EEK'=>'korona esto..ska',
                            'RON'=>'lej rumu..ski','BGN'=>'lew bu..garski','LVL'=>'..at ..otewski','PHP'=>'peso filipi..skie','XMN'=>'peso meksyka..skie',
                            'KRW'=>'won (Korea P..d.)');
    static $singlet = nill;
    
    static function nazwa_pliku($lokalizacja)
    {
        $nazwa = "";
        $d = dir($lokalizacja);
        while (false !== ($entry = $d->read()))
         if(eregi("([A-Za-z0-9]{1,})(.xml)",$entry))
               return $lokalizacja.$entry;
    }
    
    static function wwalucie($nazwa)
    {
        $tmp = cWaluta::$singlet;
        
        if(isset($tmp->lista[$nazwa]))
           $tmp->waluta = $nazwa;
        else  
           $tmp->waluta = 'PLN';
    }
    
    static function wWaluta($xmlfile)
    {
        if(cWaluta::$singlet == nill)
           cWaluta::$singlet = new cWaluta($xmlfile);
        
           return cWaluta::$singlet;
    }
    
    public function przewalutuj($kwota)
    {
        
        $waluta = $this->lista[$this->waluta];
        //print_r($waluta);
        $kw = $kwota / $waluta['kurs'];
        return sprintf("%01.2f {$waluta['kod']}",$kw * $waluta['licznik']);
    }
    
    private function zmien_nazwe($kod,$nazwa)
    {
        if(isset($this->znazwy[$kod]))
          return $this->znazwy[$kod];
        else
          return $nazwa;  
    }
    
    public function __construct($xmlfile)
    {
        
        $this->dane = new DOMDocument("1.0","utf-8");
        $this->dane->load($xmlfile);
        
        // pobranie mumeru kurs..w
        $doc = $this->dane->getElementsByTagName('numer_tabeli');
        $this->numer = $doc->item(0)->nodeValue;
        // pobranie daty kursu
        $doc = $this->dane->getElementsByTagName('data_publikacji');
        $this->data = $doc->item(0)->nodeValue;
        
        // tworzenie listy walut
        $doc = $this->dane;
        $wal = $doc->getElementsByTagName('pozycja');
        
        $this->lista['PLN']= array('nazwa'=>'Polski z..oty','licznik'=>'1','kurs'=>'1','kod'=>'PLN');
        
        foreach($wal as $item)
        {
         $kod = $item->getElementsByTagName('kod_waluty')->item(0)->nodeValue;    
         $nazwa = $this->zmien_nazwe($kod, $item->getElementsByTagName('nazwa_waluty')->item(0)->nodeValue);    
         $licznik = $item->getElementsByTagName('przelicznik')->item(0)->nodeValue;    
         $kurs = str_replace(',','.', $item->getElementsByTagName('kurs_sredni')->item(0)->nodeValue);
         $this->lista[$kod]= array('nazwa'=>$nazwa,'licznik'=>$licznik,'kurs'=>$kurs,'kod'=>$kod);    
        }
    }
    
}

?>


je to w singlecie
Kod
$plik = cWaluta::nazwa_pliku('/home/grobyopi/www.nbp.pl/Kursy/xml/'); // podajje lokalizacje gdzie jest zapisany xml
$waluty = cWaluta::wWaluta($plik);
cWaluta::wwalucie("USD"); // ustawiam walute
//w cenniku podaje
$waluty->przewalutuj(50); //to jest 50zł zwraca juz przeliczone


w cronie mam wpisane
Kod
codzienie o 12:59 "/bin/rm /home/grobyopi/www.nbp.pl/Kursy/xml/*"
codziennie o 13:00 "/usr/bin/wget -r  http://www.nbp.pl/Kursy/KursyA.html"


może ci się coś przyda (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

2 Stron V  < 1 2
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.04.2026 - 21:13