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
<?php
/**
* Pobierane kursów walut ze strony NBP
* @author Czachor <czahor[at]gmail[dot]com>
*/
class NBPExchange
{
/**
* ścieżka do pliku XML z kursami walut
* @var str
*/
public static $sXmlURL = 'http://nbp.pl/kursy/xml/';
/**
* nazwa pliku zawirającego dane o plikach XML
* @var str
*/
public static $xDirContentFile = 'dir.txt';
/**
* przechowuje nazwę aktualnego pliku XML
* @var str
*/
public $todayXMLFile = null;
/**
* przechowuje dane walut wg kodu waluty
* @var array
*/
public $currency = array();
/**
* przechowuje dane walut wg nazwy kraju
* @var array
*/
public $currencyByCountry = array();
function __construct()
{
$this->getTodayXML();
$this->createCurrencyArray();
}
/**
* pobiera nazwę aktualnego pliku XML z kursami walut
*/
private function getTodayXML()
{
if ($remoteDirInfo === false)
{
echo 'Błąd podczas otwierania zdalnego pliku z informacją o katalogu! System przerwał pracę.'; return false;
};
$remoteDirInfo = explode("r\n", $remoteDirInfo); //usunięcie ostatniego pustego elementu tablicy, jeśli tego nie będzie, pojawi się
//"Notice: Uninitialized string offset: 0"
//wyszukiwanie elementów z 'c' ("Tabela kursów średnich walut obcych")
}
/**
* funkcja zwrotna wywoływana przez array_filter w $this->getTodayXML()
* wyszukuje wszystkie elementy, w których pierwsza litera to "b" (oznaczenie NBP dla
* plików XML zawierających "Tabelę kursów średnich walut obcych"
* @param str $data
* @return str
*/
private function searchB($data)
{
if ($data{0} == 'b')
{
return $data;
};
}
/**
* tworzy tablice z danymi walut
*/
private function createCurrencyArray()
{
$xml = simplexml_load_file(self::$sXmlURL . $this->todayXMLFile . '.xml');
foreach($xml->pozycja as $pozycja => $pozData)
{
$this->currency[(string) $pozData->kod_waluty] = $pozData;
$this->currencyByCountry[(string) $pozData->nazwa_kraju] = $pozData;
};
}
};
//przykład użycia
$info = new NBPExchange();
// ALL (Albania): 2,9803
echo 'ALL (' . $info->currency['ALL']->nazwa_kraju . '): ' . $info->currency['ALL']->kurs_sredni . '<br />';
// Angola (AOA): 0,0331
echo 'Angola (' . $info->currencyByCountry['Angola']->kod_waluty . '): ' . $info->currencyByCountry['Angola']->kurs_sredni;
/* SimpleXMLElement Object
(
[nazwa_kraju] => Albania
[nazwa_waluty] => lek
[przelicznik] => 100
[kod_waluty] => ALL
[kurs_sredni] => 2,9803
) */
?>
Wszystkie uwagi mile widziane (IMG:
http://forum.php.pl/style_emoticons/default/smile.gif)
Ten post edytował czachor 16.11.2007, 20:37:34