[PHP] Jak pobrać i pokazać aktualne notowania średnich kursów walut z NBP?

0x01 graphic

Chcesz umieścić na stronie aktualne notowania średnich kursów walut z NBP.

0x01 graphic

Skrypt jest bardzo przydatny dla wszystkich serwisów z pogranicza biznesu i finansów. Wiele osób potrzebuje sprawdzić aktualne notowania i zamiast szukać ich w Sieci, może je oglądać na Twojej stronie.

Prosty skrypt umożliwia pobranie notować u samego źródła, czyli ze stron NBP. Zobacz jak pobrać i wstawić na stronę aktualne kursy walut:

<?

$f = @fopen("http://www.nbp.pl/Kursy/KursyA.html", "r");

if ($f) {

while(!feof($f)) $strona.= fread($f,1024); fclose($f);

$strona = preg_replace("/\r/", " ", $strona);

$strona = preg_replace("/\n/", " ", $strona);

preg_match("/z dnia <b>(.*?)<\/b>/", $strona, $zdnia);

echo "<br>średnie kursy walut <br>NBP z ". $zdnia[1];

preg_match_all("/<tr valign=\"middle\">.*?<\/tr>/", $strona, $sa);

for ($i=1; $i<count($sa[0]); $i++) {

$kursy[] = explode("`",preg_replace(

"/.*?<td.*?>(.*?)<\/td>.*?<td.*?>(.*?)<\/td>.*?<td.*?>(.*?)<\/td>.*/",

"$1`$2`$3",$sa[0][$i]));

}

}

for ($i=0; $i<count($kursy); $i++) {

if (eregi("USD",$kursy[$i][1])) echo "<br>1 USD - ".$kursy[$i][2];

if (eregi("EUR",$kursy[$i][1])) echo "<br>1 EUR - ".$kursy[$i][2];

if (eregi("GBP",$kursy[$i][1])) echo "<br>1 GBP - ".$kursy[$i][2];

}

?>

Przykład:
średnie kursy walut
NBP z 2004-05-14
1 USD - 4,0340
1 EUR - 4,7593
1 GBP - 7,0702

Kursy można pobrać na dwa sposoby - albo odczytać je ze strony WWW (jej adres jest stały) albo pobrać z pliku XML (ale adres tej strony zmienia się codziennie). Łatwiejszy wariant odczytania notowań to pobranie ich ze strony WWW.

Po wczytaniu strony, wystarczy za pomocą wyrażeń regularnych wyciąć z niej odpowiednie fragmenty tabeli i wypisać tylko te waluty, które nas interesują. Możesz oczywiście dopisać nazwy kolejnych walut, przykład obejmuje tylko te najczęściej wykorzystywane, a więc USD, EUR i GBP.

Program przestanie działać w chwili, gdy NBP zmieni adres, układ i kod swoich stron WWW, ale pewnie nie nastąpi to szybko... W razie zmiany kodu na stronie, wystarczy tylko zmodyfikować zawartość wyrażeń regularnych, aby całość nadal działała poprawnie.

W tablicy dwuwymiarowej $kursy zapisane są dane o wszystkich kursach walut. Dla dnia 2004.05.04 struktura tablicy prezentuje się następująco:

Array

(

[0] => Array

(

[0] => dolar amerykański

[1] => 1 USD

[2] => 3,9731

)

[1] => Array

(

[0] => dolar australijski

[1] => 1 AUD

[2] => 2,8841

)

[2] => Array

(

[0] => dolar hongkoński

[1] => 1 HKD

[2] => 0,5093

)

[3] => Array

(

[0] => dolar kanadyjski

[1] => 1 CAD

[2] => 2,9027

)

[4] => Array

(

[0] => euro

[1] => 1 EUR

[2] => 4,7805

)

[5] => Array

(

[0] => forint węgierski

[1] => 100 HUF

[2] => 1,9015

)

[6] => Array

(

[0] => frank szwajcarski

[1] => 1 CHF

[2] => 3,0774

)

[7] => Array

(

[0] => funt cypryjski

[1] => 1 CYP

[2] => 8,1572

)

[8] => Array

(

[0] => funt szterling

[1] => 1 GBP

[2] => 7,1070

)

[9] => Array

(

[0] => hrywna ukraińska

[1] => 1 UAH

[2] => 0,7453

)

[10] => Array

(

[0] => jen japoński

[1] => 100 JPY

[2] => 3,6029

)

[11] => Array

(

[0] => korona czeska

[1] => 1 CZK

[2] => 0,1477

)

[12] => Array

(

[0] => korona duńska

[1] => 1 DKK

[2] => 0,6424

)

[13] => Array

(

[0] => korona estońska

[1] => 1 EEK

[2] => 0,3055

)

[14] => Array

(

[0] => korona norweska

[1] => 1 NOK

[2] => 0,5808

)

[15] => Array

(

[0] => korona słowacka

[1] => 1 SKK

[2] => 0,1187

)

[16] => Array

(

[0] => korona szwedzka

[1] => 1 SEK

[2] => 0,5232

)

[17] => Array

(

[0] => lir maltański

[1] => 1 MTL

[2] => 11,2231

)

[18] => Array

(

[0] => lit litewski

[1] => 1 LTL

[2] => 1,3846

)

[19] => Array

(

[0] => łat łotewski

[1] => 1 LVL

[2] => 7,3052

)

[20] => Array

(

[0] => rand południowoafrykański

[1] => 1 ZAR

[2] => 0,5720

)

[21] => Array

(

[0] => rubel rosyjski

[1] => 1 RUB

[2] => 0,1370

)

[22] => Array

(

[0] => tolar słoweński

[1] => 100 SIT

[2] => 2,0041

)

[23] => Array

(

[0] => SDR (MFW)

[1] => 1 XDR

[2] => 5,8004

)

)

Aby pokazać informacje o Euro możesz użyć $kursy[4][0] dla opisu, $kursy[4][1] dla waluty i $kursy[4][2] dla kursu. Ale lepiej użyć szukania waluty w pętli (jak w skrypcie), bo dzisiaj Euro jest na 5 pozycji, ale za tydzień może być na 15-stej, jeżeli ktoś przestawi kolejność tabeli.