Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [klasa][php5] kursy walut z NBP
czachor
post 14.11.2007, 18:27:31
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 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 smile.gif

Ten post edytował czachor 16.11.2007, 20:37:34


--------------------
how many SEO experts does it take to change a light bulb,lightbulb,light,bulb,lamp,lighting,switch,sex,xxx
5-Reasons-why-you-should-NEVER-fix-a-computer-for-free
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
GrayHat
post 14.11.2007, 18:39:13
Post #2





Grupa: Zarejestrowani
Postów: 566
Pomógł: 18
Dołączył: 23.08.2003
Skąd: Łomża

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


jeszcze jakies zabezpieczenie typu try/catch i bedzie znosne winksmiley.jpg


--------------------
*Note: No animals were killed durning the construction of this post.
Go to the top of the page
+Quote Post
czachor
post 16.11.2007, 20:32:48
Post #3





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

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


Hmm. Mógłby ktoś mi powiedzieć, czemu wyskakuje mi taki błąd?
Strict Standards: Only variables should be passed by reference in home/fwid/ftp/libs/currencyExchangeNBP.class.php on line 85 (linia 85 to tutaj 67).

Wydaje mi się, że wszystko jest ok, ale coś jednak nie...


--------------------
how many SEO experts does it take to change a light bulb,lightbulb,light,bulb,lamp,lighting,switch,sex,xxx
5-Reasons-why-you-should-NEVER-fix-a-computer-for-free
Go to the top of the page
+Quote Post
loozaque
post 13.10.2008, 13:11:19
Post #4





Grupa: Zarejestrowani
Postów: 17
Pomógł: 1
Dołączył: 12.02.2004

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


Cytat(czachor @ 16.11.2007, 21:32:48 ) *
Hmm. Mógłby ktoś mi powiedzieć, czemu wyskakuje mi taki błąd?
Strict Standards: Only variables should be passed by reference in home/fwid/ftp/libs/currencyExchangeNBP.class.php on line 85 (linia 85 to tutaj 67).

Wydaje mi się, że wszystko jest ok, ale coś jednak nie...


Zamień:
$this->todayXMLFile = array_pop(array_filter($remoteDirInfo, array($this, 'searchB')));

Na:
$aFilename = array_filter($remoteDirInfo, array($this, 'searchB'));
$this->todayXMLFile = array_pop($aFilename);


--------------------
pozdr.
Tomek
Go to the top of the page
+Quote Post
nastybig
post 23.02.2009, 15:04:59
Post #5





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 22.02.2009

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


A jak do tego dorobić skrypcik który wyciągnie w jakiejś pętli wszystkie kursy ?
Go to the top of the page
+Quote Post
Piotr1
post 12.05.2009, 16:27:17
Post #6





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 12.05.2009

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


Cytat(nastybig @ 23.02.2009, 16:04:59 ) *
A jak do tego dorobić skrypcik który wyciągnie w jakiejś pętli wszystkie kursy ?


  1. <meta charset="utf8" />
  2.  
  3. <?php
  4. include('classes/nbp.php');
  5. //przykład użycia
  6. $info = new NBPExchange();
  7.  
  8. foreach($info->currency as $name => $value) {
  9.  echo '<span style="font-weight: bold">' . $value -> kod_waluty . ' (' . $value -> nazwa_kraju . ')</span><br />';
  10.  echo '1 ' . $value -> nazwa_waluty . ' = ' . $value->kurs_sredni . ' zł<br /><br />';
  11. }
  12.  
  13. ?>
Go to the top of the page
+Quote Post
m227
post 17.06.2009, 16:32:39
Post #7





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 3.10.2005
Skąd: Łódź

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


Zrobiłem coś takiego, zapraszam, może się przyda:

http://e-storm.pl/kursy/

Pozdrawiam, m227


--------------------
glebowski.pl
Go to the top of the page
+Quote Post
m-naw
post 25.06.2009, 23:28:24
Post #8





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 22.06.2009

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


Nie lepiej trzymać się nazewnictwa w jednym języku?


--------------------
Szukasz ekipy filmowej? Casting do filmu, teledysku, reklamy!

Profesjonalne tworzenie stron www. Sklepy internetowe, strony firmowe, portale internetowe.
Go to the top of the page
+Quote Post

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 - 03:12