Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [klasa][php5] kursy walut z NBP
czachor
post
Post #1





Grupa: Zarejestrowani
Postów: 897
Pomógł: 40
Dołączył: 16.12.2003
Skąd: Warszawa

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


Witam,
potrzebowałem klasy do wyciągania kursów walut z NBP, znalazłem klasę napisaną przez @stanik_jr, ale nie wiem czemu nie działa mi pomimo usilnej walki (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Dlatego na szybko stworzyłem coś takiego...

16.11.2007 - drobna poprawka

  1. <?php
  2. /**
  3.  * Pobierane kursów walut ze strony NBP
  4.  * @author Czachor <czahor[at]gmail[dot]com>
  5.  */
  6.  
  7. class NBPExchange
  8. {
  9. /**
  10.  * ścieżka do pliku XML z kursami walut
  11.  * @var str
  12.  */
  13. public static $sXmlURL = 'http://nbp.pl/kursy/xml/';
  14.  
  15. /**
  16.  * nazwa pliku zawirającego dane o plikach XML
  17.  * @var str
  18.  */
  19. public static $xDirContentFile = 'dir.txt';
  20.  
  21. /**
  22.  * przechowuje nazwę aktualnego pliku XML
  23.  * @var str
  24.  */
  25. public $todayXMLFile = null;
  26.  
  27. /**
  28.  * przechowuje dane walut wg kodu waluty
  29.  * @var array
  30.  */
  31. public $currency = array();
  32.  
  33. /**
  34.  * przechowuje dane walut wg nazwy kraju
  35.  * @var array
  36.  */
  37. public $currencyByCountry = array();
  38.  
  39.  
  40. function __construct()
  41. {
  42. $this->getTodayXML();
  43. $this->createCurrencyArray();
  44. }
  45.  
  46.  
  47. /**
  48.  * pobiera nazwę aktualnego pliku XML z kursami walut
  49.  */
  50. private function getTodayXML()
  51. {
  52. $remoteDirInfo = @file_get_contents(self::$sXmlURL . self::$xDirContentFile);
  53.  
  54. if ($remoteDirInfo === false)
  55. {
  56. echo 'Błąd podczas otwierania zdalnego pliku z informacją o katalogu! System przerwał pracę.';
  57. return false;
  58. };
  59.  
  60. $remoteDirInfo = explode("r\n", $remoteDirInfo);
  61. //usunięcie ostatniego pustego elementu tablicy, jeśli tego nie będzie, pojawi się
  62. //"Notice: Uninitialized string offset: 0"
  63. array_pop($remoteDirInfo);
  64.  
  65. //wyszukiwanie elementów z 'c' ("Tabela kursów średnich walut obcych")
  66. $this->todayXMLFile = array_pop(array_filter($remoteDirInfo, array($this, 'searchB')));
  67. }
  68.  
  69.  
  70. /**
  71.  * funkcja zwrotna wywoływana przez array_filter w $this->getTodayXML()
  72.  * wyszukuje wszystkie elementy, w których pierwsza litera to "b" (oznaczenie NBP dla
  73.  * plików XML zawierających "Tabelę kursów średnich walut obcych"
  74.  * @param str $data
  75.  * @return str
  76.  */
  77. private function searchB($data)
  78. {
  79. if ($data{0} == 'b')
  80. {
  81. return $data;
  82. };
  83. }
  84.  
  85.  
  86. /**
  87.  * tworzy tablice z danymi walut
  88.  */
  89. private function createCurrencyArray()
  90. {
  91. $xml = simplexml_load_file(self::$sXmlURL . $this->todayXMLFile . '.xml');
  92.  
  93. foreach($xml->pozycja as $pozycja => $pozData)
  94. {
  95. $this->currency[(string) $pozData->kod_waluty] = $pozData;
  96. $this->currencyByCountry[(string) $pozData->nazwa_kraju] = $pozData;
  97. };
  98. }
  99. };
  100.  
  101.  
  102. //przykład użycia
  103. $info = new NBPExchange();
  104.  
  105. // ALL (Albania): 2,9803
  106. echo 'ALL (' . $info->currency['ALL']->nazwa_kraju . '): ' . $info->currency['ALL']->kurs_sredni . '<br />';
  107.  
  108. // Angola (AOA): 0,0331
  109. echo 'Angola (' . $info->currencyByCountry['Angola']->kod_waluty . '): ' . $info->currencyByCountry['Angola']->kurs_sredni;
  110.  
  111. /* SimpleXMLElement Object
  112. (
  113. [nazwa_kraju] => Albania
  114. [nazwa_waluty] => lek
  115. [przelicznik] => 100
  116. [kod_waluty] => ALL
  117. [kurs_sredni] => 2,9803
  118. ) */
  119. print_r($info->currency['ALL']);
  120. ?>


Wszystkie uwagi mile widziane (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował czachor 16.11.2007, 20:37:34
Go to the top of the page
+Quote Post

Posty w temacie


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: 22.11.2025 - 17:46