Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Skrypt Waluty - Pobierz z NBP
Forum PHP.pl > Forum > PHP
Dr.VaNs
Witam,


kiedyś miałem do tego celu własny skrypt ale go zapodziałem gdzieś, teraz znowu potrzebuje coś podobnego ale czasu na napisanie nie mam.

W skrócie:

Prosty skrypt pobierający z NBP kurs Walut i od razu wyświetlający 5 walut (zdefiniowane)

Wiem że coś takiego jest opartego o curl i pregmatch ale nie umiem znaleźć tego, bo mój skrypt był też oparty o coś zbliżonego.

Pozdrawiam.
dr_bonzo
forum.php.pl -> prawa gora -> pole szukarki -> "nbp" lub "nbp kursy" i juz
nexis
  1. <?php
  2. class Nbp
  3. {
  4. private $_url;
  5. private $_cache = 'nbp';
  6.  
  7. public function __construct($url = 'http://www.nbp.pl')
  8. {
  9. $this->_url = $url;
  10. }
  11.  
  12. public function getExchangeRates()
  13. {
  14. $xml = $this->_getXml();
  15. $p = xml_parser_create();
  16. xml_parse_into_struct($p, $xml, $vals, $index);
  17. xml_parser_free($p);
  18. $nbp = array();
  19. foreach($index['NAZWA_WALUTY'] as $value) {
  20. $nbp[$vals[$value+4]['value']] = str_replace(',', '.', $vals[$value+6]['value']);
  21. }
  22. return $nbp;
  23. }
  24.  
  25. public function get($code)
  26. {
  27. $rates = $this->getExchangeRates();
  28. if (!isset($rates[$code])) {
  29. throw new Exception('Currency does not exist!');
  30. }
  31. return $rates[$code];
  32. }
  33.  
  34. public function getEuro()
  35. {
  36. return $this->get('EUR');
  37. }
  38.  
  39. private function _getXml()
  40. {
  41. $filepath = sprintf('%s/%s.xml', $this->_cache, date('Y-m-d'));
  42. if (file_exists($filepath)) {
  43. return file_get_contents($filepath);
  44. } else {
  45. $html = file_get_contents($this->_url . '/kursy/kursya.html');
  46. $pattern = '/\/kursy\/xml\/(.*?)\.xml/';
  47. preg_match_all($pattern, $html, $matches);
  48. if (!isset($matches[0][0])) {
  49. throw new Exception('Unable to find XML filepath!');
  50. }
  51. $xml = file_get_contents($this->_url . $matches[0][0]);
  52. if (!file_exists($this->_cache)) {
  53. if (!mkdir($this->_cache)) {
  54. throw new Exception('Unable to create cache directory!');
  55. }
  56. }
  57. if (!file_put_contents($filepath, $xml)) {
  58. throw new Exception('Unable to save file in cache directory!');
  59. }
  60. return $xml;
  61. }
  62. }
  63. }
  64.  
  65. $nbp = new Nbp();
  66. echo $nbp->getEuro();
  67. echo $nbp->get('USD');
  68. print_r($nbp->getExchangeRates());
  69. ?>
Dr.VaNs
Ok widzę że skrypt ładnie działa, jestem za niego bardzo wdzięczny, ale mam też pytanie


$nbp->getExchangeRates()

jest pod tym tablica:

CODE
Array ( [THB] => 0.0845 [USD] => 2.8675 [AUD] => 2.4745 [HKD] => 0.3703 [CAD] => 2.6655 [NZD] => 2.0192 [SGD] => 2.0176 [EUR] => 4.1858 [HUF] => 1.5359 [CHF] => 2.7639 [GBP] => 4.7953 [UAH] => 0.3365 [JPY] => 3.1575 [CZK] => 0.1642 [DKK] => 0.5623 [EEK] => 0.2675 [ISK] => 2.3152 [NOK] => 0.4833 [SEK] => 0.4099 [HRK] => 0.5708 [RON] => 0.9837 [BGN] => 2.1402 [TRY] => 1.9144 [LTL] => 1.2123 [LVL] => 5.9542 [PHP] => 0.0594 [MXN] => 0.2140 [ZAR] => 0.3777 [BRL] => 1.5854 [MYR] => 0.8212 [RUB] => 0.0934 [IDR] => 2.8988 [KRW] => 0.2349 [CNY] => 0.4203 [haha.gifR] => 4.5385 )


i ja chciałbym się akurat odczytać 3 wartość z tej tablicy, np. echo $nbp[3]; wypluwa że nie mogę traktować nbp jako tablicy.
piotrooo89
ale nie możesz się odwoływać do niej tak: $nbp[3] tylko $nbp['THB'].
Dr.VaNs
Dalej Cannot use object of type Nbp as array


Jakieś pomysły?
dr_bonzo
Masakra

$harryPotter = $nbp->getExchangeRates();
print_r($harryPotter['THB'] );
Dr.VaNs
Dzięki za odpowiedź, po prostu nie wpadłem na to że może to być takie proste.

Dzięki Wielkie.
nexis
Cytat(Dr.VaNs @ 11.09.2009, 17:45:49 ) *
Dalej Cannot use object of type Nbp as array


Jakieś pomysły?

Przecież podałem przykłady użycia pod spodem, czy nie? sciana.gif
poli25
A jak zrobic żeby jeszcze pobierał dodatkowo nr tabeli np 46/A/NBP/2012 z dnia dzieijszego tj. 07.03.2012 Nie wiem jak to dopisać questionmark.gif
@rtur
Może mi ktoś podpowiedzieć jak pobrać tym skryptem inne dane z xml'a?

Chciałbym wyświetlić na stronie numer tabeli, nazwę waluty, przelicznik, kod waluty, średni kurs, i datę publikacji kursu

Chodzi mi o stworzenie takiej tabeli:

  1. <tbody><tr><td colspan="4" align="center"><b>Tabela 157/A/NBP/2012 z dnia 2012.08.14</b></td></tr>
  2. <tr>
  3. <td>forint (Węgry)</td>
  4. <td><b>100</b></td>
  5. <td><b>HUF</b></td>
  6. <td>1,4652 zł</td>
  7. </tr>
L00zak
dla potomności

  1. $url='http://nbp.pl/kursy/kursya.html';
  2. $chf = curl_init();
  3. curl_setopt ($chf, CURLOPT_URL, $url);
  4. curl_setopt ($chf, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
  5. curl_setopt($chf, CURLOPT_REFERER, $url);
  6. curl_setopt($chf, CURLOPT_RETURNTRANSFER, 1);
  7. curl_setopt($chf, CURLOPT_TIMEOUT, 15);
  8. $storef = curl_exec ($chf);
  9.  
  10.  
  11. preg_match_all("'z dnia (.*?)<\/p>'si", $storef, $matches1, PREG_SET_ORDER);
  12. preg_match_all("'<td class=\"bgt2 left\">euro(.*?)<\/tr>'si", $storef, $matches2, PREG_SET_ORDER);
  13. preg_match_all("'<td class=\"bgt2 right\">(.*?)<\/td>'si", $matches2[0][1], $matches3, PREG_SET_ORDER);
  14. echo $matches1[0][1];
  15. echo '<br>';
  16. echo $matches3[1][1];
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.