Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 30.03.2005 Skąd: Łódź Ostrzeżenie: (0%)
|
Witam,
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
przykładowe użycie:
wynik: Cytat Array ( [0] => dolar amerykański [1] => 1 [2] => USD [3] => 2,8020 )
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 ) ) Ten post edytował stanik_jr 22.05.2007, 13:57:58 |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 237 Pomógł: 1 Dołączył: 8.02.2007 Ostrzeżenie: (10%)
|
A to tak można bez pozwolenia wykorzystywać dane banków? O.o
|
|
|
|
Post
#3
|
|
|
Admin Techniczny Grupa: Administratorzy Postów: 2 072 Pomógł: 93 Dołączył: 5.07.2005 Skąd: Olsztyn |
zapewne tak, zwłaszcza że udostępniają jeszcze xmlki z danymi
|
|
|
|
Post
#4
|
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 21.06.2007 Ostrzeżenie: (0%)
|
No pewnie, że można korzystać - ja wrzucam co tylko mogę z http://www.money.pl/webmaster/ bo sami zrobili parę tabelek do wrzucenia na sajty, są też i aktualne kursy walut z wykresikiem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Teraz szukam czegoś z turystyki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
|
|
|
|
Post
#5
|
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza |
Odświeżam topic.
Czy pobierał ktoś z Was kursy z PKO BP? Konkretnie chodzi mi o tą tabelę: http://www.pkobp.pl/index.php/id=waluty/zone=-1/section=ogol Nie wiecie poza tym czy PKO BP udostępnia gdzieś xml z kursami? Ja nie namierzyłem niczego takiego, a do pobierania danych ze stron zaufania nie mam :/ Wystarczy, że coś się zmieni w kodzie i regexp może paść... Pozdrawiam: pion PS: muszę skorzystać z PKO BP bo Klient twierdzi, że jest tam najwyższy kurs Euro (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) więc przejście na NBP (gdzie kurs jest niższy) nie wchodzi w grę -> strata kasy Ten post edytował phpion.com 21.10.2007, 20:05:57 |
|
|
|
Post
#6
|
|
|
Grupa: Zarejestrowani Postów: 55 Pomógł: 0 Dołączył: 5.11.2006 Skąd: Bochnia Ostrzeżenie: (0%)
|
|
|
|
|
Post
#7
|
|
|
Grupa: Zarejestrowani Postów: 1 173 Pomógł: 121 Dołączył: 24.09.2007 Skąd: Toruń Ostrzeżenie: (0%)
|
Wklej kawałek kodu włącznie z 5 linią
|
|
|
|
Post
#8
|
|
|
Grupa: Zarejestrowani Postów: 55 Pomógł: 0 Dołączył: 5.11.2006 Skąd: Bochnia Ostrzeżenie: (0%)
|
|
|
|
|
Post
#9
|
|
|
Grupa: Zarejestrowani Postów: 1 173 Pomógł: 121 Dołączył: 24.09.2007 Skąd: Toruń Ostrzeżenie: (0%)
|
Zobacz tak, parse error czyli gdzieś brakuje znaka albo jest wstawiony w złym miejscu. |
|
|
|
Post
#10
|
|
|
Grupa: Zarejestrowani Postów: 55 Pomógł: 0 Dołączył: 5.11.2006 Skąd: Bochnia Ostrzeżenie: (0%)
|
nadal to samo (IMG:http://forum.php.pl/style_emoticons/default/sadsmiley02.gif)
|
|
|
|
Post
#11
|
|
|
Grupa: Zarejestrowani Postów: 1 Pomógł: 0 Dołączył: 9.01.2008 Ostrzeżenie: (0%)
|
zapewne masz php4 a ten kod pisany jest pod php5 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
usuń słowa "public" i "private" które są przed słowami "function", a wszystkie inne ( te po których niema "function") zamień na "var" *oczywiście bez cudzysłowiów "" (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) |
|
|
|
Post
#12
|
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%)
|
usuń słowa "public" i "private" które są przed słowami "function", a wszystkie inne ( te po których niema "function") zamień na "var" To nic nie da. Używany tam jest XMLReader, którego w PHP4 nie ma, więc zmiany te są bezcelowe.~webmasts zainstaluj siobie PHP5 a nie wspierasz PHP4 - język już nierozwijany. |
|
|
|
Post
#13
|
|
|
Grupa: Zarejestrowani Postów: 1 Pomógł: 0 Dołączył: 22.02.2008 Ostrzeżenie: (0%)
|
Hmm, od dwóch dni caly czas 0 mam na Euro. Coś się zmieniło? Ma ktoś jakieś rozwiązanie?
|
|
|
|
Post
#14
|
|
|
Grupa: Zarejestrowani Postów: 149 Pomógł: 12 Dołączył: 3.03.2008 Skąd: łódzkie Ostrzeżenie: (0%)
|
Witaj
Chyba czegoś nie rozumiem, albo masz błąd w kodzie. Możesz wyjaśnić dlaczego w lini 100, w elseif`ie testujesz czy funkcja fsockopen nie istnieje (inne też tam testujesz), jeśli nie istnieje to wchodzimy do warunku i ... używamy fsockopen oraz reszty innych funkcji plikowych (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Kod elseif(!function_exists('fsockopen') || !function_exists('fputs') || !function_exists('feof') || !function_exists('fgets')) Nie powinno być raczej: Kod elseif(function_exists('fsockopen') && function_exists('fputs') && function_exists('feof') && function_exists('fgets')) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) Bład wydaje się elementarny stąd aż wątpie, że możliwy i być może to ja czegoś nie rozumiem. Pozdrawiam Jarek Bolo |
|
|
|
Post
#15
|
|
|
Grupa: Zarejestrowani Postów: 1 873 Pomógł: 152 Dołączył: 9.04.2006 Skąd: Berlin Ostrzeżenie: (0%)
|
Ehm, znak ! to znak "przeciwiństwa". Jeśli dasz
if(!$true) { } to ifka przejdzie jeśli $true = false; Tak samo w przypadku funkcji:
Rozumiesz? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) EDIT: Ups, nie o to ci chodzi (IMG:http://forum.php.pl/style_emoticons/default/haha.gif) Sorry, posta nie doczytałem. (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) Ten post edytował bim2 3.03.2008, 14:25:01 |
|
|
|
Post
#16
|
|
|
Grupa: Zarejestrowani Postów: 149 Pomógł: 12 Dołączył: 3.03.2008 Skąd: łódzkie Ostrzeżenie: (0%)
|
Mimo, że nie doczytałeś i błędną odpowiedź dałeś to i tak odpiszę dla wyklarowania o co mi chodzi.
Otóż Twoja funkcja test() zwraca false i jak w ifce sprawdzamy if (!test()) to ifka nas wpusci. Teraz wracając do WalutyNBP. function_exist() zwróci false jeśli funkcja nie istnieje, czyli przy takim zapisie if (!function_exist('fsockopen')) zostaniemy wpuszczeni do pętli jeśli fsockopen nie będzie dostępne, a tam w tej pętli używamy fsockopen(), stąd moje niezrozumienie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Pozdrawiam Jarek Bolo |
|
|
|
Post
#17
|
|
|
Grupa: Zarejestrowani Postów: 1 873 Pomógł: 152 Dołączył: 9.04.2006 Skąd: Berlin Ostrzeżenie: (0%)
|
Rozumiem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Jeszcze może wtrące, że można by sprawdzić czy allow_url_wrappers jest dozwolone (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
|
|
|
|
Post
#18
|
|
|
Grupa: Zarejestrowani Postów: 135 Pomógł: 1 Dołączył: 7.05.2005 Ostrzeżenie: (0%)
|
Pozwolę zadać to pytanie tutaj aby nie otwierać nowego tematu.
Mianowicie chodzi mi o plik: http://www.nbp.pl//Kursy/xml/dir.txt Ostatnie 6 cyfr to oczywiście data dodania. Analizując jednak plik na prędce widać że są dni w których nie ma aktualizacji. Jakim cudem? (IMG:http://forum.php.pl/style_emoticons/default/blinksmiley.gif) |
|
|
|
Post
#19
|
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 10.01.2006 Ostrzeżenie: (0%)
|
najprawdopodobniej są to weekendy i dni wolne
|
|
|
|
Post
#20
|
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 30.09.2007 Ostrzeżenie: (0%)
|
Mi klasa nie działała poprawnie, dopiero poprawienie funkcji aktualny_xml zmusiło klasę do poprawnej pracy.
Kod private function aktualny_xml($strTabela='a'){
$fp = fsockopen("www.nbp.pl", 80, $errno, $errstr, 30); if (!$fp) { echo "$errstr ($errno) \n"; } else { $out = "GET /Kursy/xml/dir.txt HTTP/1.1\r\n"; $out .= "Host: www.nbp.pl\r\n"; $out .= "Connection: Close\r\n\r\n"; fwrite($fp, $out); while (!feof($fp)) { $arrPlikiXML[] = fgets($fp, 128); } fclose($fp); } $arrPlikiXML = array_reverse ($arrPlikiXML); for($i=0; $i<=1; $i++){ $strNazwa=trim($arrPlikiXML[$i]); if(substr($strNazwa,0,1)==$strTabela){ $strDzisiejszyXML=trim($arrPlikiXML[$i]); } } return $strDzisiejszyXML; } Ten post edytował soldi 23.11.2008, 00:00:04 |
|
|
|
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. |
|
|
|
Post
#22
|
|
|
Grupa: Zarejestrowani Postów: 214 Pomógł: 18 Dołączył: 25.04.2009 Ostrzeżenie: (20%)
|
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) |
|
|
|
![]() ![]() |
|
Aktualny czas: 22.11.2025 - 17:46 |