Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> waluty z NBP, klasa, php5
stanik_jr
post 22.05.2007, 12:04:49
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

  1. <?php
  2. /**
  3.  * Pobieranie kursów walut z NBP
  4.  * 
  5.  * Klasa do obsługi plików xml z kursami walut udostępnianych przez NBP
  6.  * 
  7.  * @author Bartłomiej Staniszczak <b_staniszczak at tlen dot pl>
  8.  * @copyright 2007 Bartłomiej Staniszczak
  9.  * @version 1.0
  10.  *
  11.  */
  12. class WalutyNBP {
  13.  
  14. /**
  15.  * Tablica z wszystkimi kursami zczytanymi z XML
  16.  *
  17.  * @var array
  18.  */
  19. private $arrKursy = array();
  20.  
  21. /**
  22.  * Zmienna zawierająca datę aktualizacji kursów
  23.  *
  24.  * @var string
  25.  */
  26. private $strData;
  27.  
  28. /**
  29.  * Konstruktor parsuje xml'a do tablicy
  30.  *
  31.  * @param string $strEncoding
  32.  * @param string $strUrlXml
  33.  */
  34. public function __construct($strEncoding='UTF-8',$strUrlXml='http://www.nbp.pl/Kursy/xml/'){
  35. $strUrlXml=$strUrlXml.$this->aktualny_xml().'.xml';
  36. $objXml = new XMLReader();
  37. if(function_exists('curl_init')){
  38. $objXml->XML($this->ccurl_fopen($strUrlXml));
  39. }
  40. else{
  41. $objXml->open($strUrlXml);
  42. }
  43. $j=0;
  44. while($objXml->read()){
  45. if($objXml->name === 'data_publikacji' && $objXml->nodeType==1){
  46. $objXml->read();
  47. $this->strData=$objXml->value;
  48. }
  49. if($objXml->depth==3){
  50. if($j==4){
  51. $j=0;
  52. $this -> arrKursy[$arrWaluta[2]]=$arrWaluta;
  53. $arrWaluta=array();
  54. }
  55. if($strEncoding!='ISO-8859-2'){
  56. $arrWaluta[$j]=iconv('ISO-8859-2',$strEncoding,$objXml->value);
  57. }
  58. else{
  59. $arrWaluta[$j]=$objXml->value;
  60. }
  61. $j++;
  62. }
  63. }
  64. }
  65.  
  66. /**
  67.  * Otwieranie pliku
  68.  * 
  69.  * Metoda otwiera plik i zwraca jego zawartość
  70.  *
  71.  * @param string $strUrl
  72.  * @return mixed
  73.  */
  74. private function ccurl_fopen ($strUrl){
  75. $strUser_agent = "Mozilla/8.0 (Windows 2008 SP32 + 3patch)";
  76. $resCh = curl_init();
  77. curl_setopt ($resCh, CURLOPT_URL, $strUrl);
  78. curl_setopt ($resCh, CURLOPT_USERAGENT, $strUser_agent);
  79. curl_setopt ($resCh, CURLOPT_COOKIEJAR, "cookie.txt");
  80. curl_setopt ($resCh, CURLOPT_HEADER, 0);
  81. curl_setopt ($resCh, CURLOPT_RETURNTRANSFER, 1);
  82. curl_setopt ($resCh, CURLOPT_FOLLOWLOCATION, 1);
  83. curl_setopt ($resCh, CURLOPT_TIMEOUT, 120);
  84. $mixResult = curl_exec ($resCh);
  85. curl_close($resCh);
  86. return $mixResult;
  87. }
  88.  
  89. /**
  90.  * Aktualna nazwa pliku XML z danymi
  91.  *
  92.  * @param string $strTabela
  93.  * @return string
  94.  */
  95. private function aktualny_xml($strTabela='a'){
  96. if(function_exists('curl_init')){
  97. $resLista = $this->ccurl_fopen('http://www.nbp.pl//Kursy/xml/dir.txt');
  98. $arrPlikiXML = explode("n",$resLista);
  99. }
  100. elseif(!function_exists('fsockopen') || !function_exists('fputs') || !function_exists('feof') || !function_exists('fgets')){
  101. $resPolalczenie = fsockopen ( "www.nbp.pl", 80 );
  102. $strHeaders = 'GET /Kursy/xml/dir.txt HTTP/1.0' . "rn"; 
  103. $strHeaders .= 'Host: www.nbp.pl' . "rn";
  104. $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";
  105.  
  106. fputs ( $resPolalczenie, $strHeaders );
  107. while ( ! feof ( $resPolalczenie ) ) {
  108. $arrPlikiXML[] = fgets ( $resPolalczenie, 128 ); 
  109. }
  110. fclose ( $resPolalczenie );
  111. }
  112. $arrPlikiXML = array_reverse ($arrPlikiXML);
  113. for($i=0; $i<=3; $i++){
  114. $strNazwa=trim($arrPlikiXML[$i]);
  115. if(substr($strNazwa,0,1)==$strTabela){
  116. $strDzisiejszyXML=trim($arrPlikiXML[$i]);
  117. }
  118. }
  119. return $strDzisiejszyXML;
  120. }
  121.  
  122. /**
  123.  * Zwraca wybrane waluty
  124.  * 
  125.  * Metoda zwraca informacje o podanych w parametrze walutach
  126.  *
  127.  * @param mixed $mixWaluty
  128.  * @return array
  129.  */
  130. public function zwroc_waluty($mixWaluty=array()){
  131. if(is_array($mixWaluty) && count($mixWaluty)==0){
  132. return $this->arrKursy;
  133. }
  134. elseif(!is_array($mixWaluty)){
  135. if(array_key_exists($mixWaluty,$this->arrKursy))
  136. return $this->arrKursy[$mixWaluty];
  137. return FALSE;
  138. }
  139. else{
  140. foreach($this->arrKursy AS $strKlucz => $arrWartosc){
  141. if(in_array($strKlucz,$mixWaluty))
  142. $arrWynikowa[$strKlucz]=$this->arrKursy[$strKlucz];
  143. }
  144. if(count($arrWynikowa)>0) 
  145. return $arrWynikowa;
  146. return FALSE;
  147. }
  148. return FALSE;
  149. }
  150.  
  151. /**
  152.  * Data aktualizacji kursów
  153.  *
  154.  * @return string
  155.  */
  156. public function getData(){
  157. return $this->strData;
  158. }
  159.  
  160. }
  161. ?>


przykładowe użycie:

  1. <?php
  2. $kursy = new WalutyNBP();
  3. $waluta = $kursy -> zwroc_waluty('USD');
  4. print_r($waluta);
  5. ?>


wynik:

Cytat
Array ( [0] => dolar amerykański [1] => 1 [2] => USD [3] => 2,8020 )


  1. <?php
  2. $kursy = new WalutyNBP();
  3. $waluta = $kursy -> zwroc_waluty(array('USD','PLN','EUR'));
  4. echo $kursy->getData().'<br/>';
  5. print_r($waluta);
  6. ?>


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
Go to the top of the page
+Quote Post

Posty w temacie
- stanik_jr   waluty z NBP   22.05.2007, 12:04:49
- - Sokal   A to tak można bez pozwolenia wykorzystywać dane b...   22.05.2007, 21:06:48
- - kwiateusz   zapewne tak, zwłaszcza że udostępniają jeszcze xml...   22.05.2007, 21:11:58
- - arborea   No pewnie, że można korzystać - ja wrzucam co tylk...   21.06.2007, 21:26:46
- - phpion.com   Odświeżam topic. Czy pobierał ktoś z Was kursy z P...   21.10.2007, 20:02:42
- - webmasts   wywala mi taki błąd [XML] pobierz, plaintext Pars...   22.12.2007, 21:08:35
- - ExPlOiT   Wklej kawałek kodu włącznie z 5 linią   22.12.2007, 21:44:07
- - webmasts   [PHP] pobierz, plaintext <?php class Walut...   22.12.2007, 21:55:23
- - ExPlOiT   [PHP] pobierz, plaintext <?php class Walut...   22.12.2007, 22:05:26
- - webmasts   nadal to samo   22.12.2007, 22:14:31
- - ev45ive   zapewne masz php4 a ten kod pisany jest pod php5 ...   9.01.2008, 21:31:46
|- - mike   Cytat(ev45ive @ 9.01.2008, 21:31:46 )...   10.01.2008, 10:48:05
- - corradzisz   Hmm, od dwóch dni caly czas 0 mam na Euro. Coś się...   22.02.2008, 11:38:49
- - jarek_bolo   Witaj Chyba czegoś nie rozumiem, albo masz błąd w...   3.03.2008, 13:13:21
- - bim2   Ehm, znak ! to znak "przeciwiństwa...   3.03.2008, 14:23:16
- - jarek_bolo   Mimo, że nie doczytałeś i błędną odpowiedź dałeś t...   3.03.2008, 14:44:46
- - bim2   Rozumiem Jeszcze może wtrące, że można by sprawdz...   7.03.2008, 21:55:58
- - parzol   Pozwolę zadać to pytanie tutaj aby nie otwierać no...   13.11.2008, 14:30:39
- - bllitz   najprawdopodobniej są to weekendy i dni wolne   13.11.2008, 15:18:46
- - soldi   Mi klasa nie działała poprawnie, dopiero...   22.11.2008, 23:59:16
- - dg2001   Witam, chciałem spróbować użyć powyższej klasy do ...   24.03.2009, 22:05:51
- - okitoki   ja to tak rozwiązałem Kod<?php class cWalut...   11.05.2009, 15:10:51


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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 06:12