Primitivní konvertor měn dle ČNB v PHP
February 16th, 2008
Tenhle týden jsem narazil na potřebu (někoho) mít na stránce blbůstku jménem “Konvertor měn”. Budiž. Je to hodně jednoduché a ne moc oštřené (např. to spoléhá to na slušnost při zadávání parametrů fce…), ale snad to někomu bude sloužit k inspiraci
Na začátku je třeba stáhnout data z České Národní Banky, která se uloží do lokálního souboru pro příští požadavky. Data rovnou přechroustáme do pole - co řádek, to položka.
if(!$data = @file($cache))
{
$uri = ‘http://www.cnb.cz/cs/financni_trhy/devizovy_trh/kurzy_devizoveho_trhu/denni_kurz.txt?date=’.date(‘d.m.Y’);
if(!$data = file($uri)) return false;
else
{
$fh = @fopen($cache,‘w+’);
@fwrite($fh,implode("\n",$data));
@fclose($fh);
}
}
Jakmile máme data, ořízneme první dva řádky v souboru, které nepotřebujeme, data projdeme a uložíme do asociativního pole, kde klíči jsou kódy měn a hodnotami jsou jejich kurzy vůči koruně (rate) za dané množství měny (amount) $struct('EUR' => array('amount'=>1,'rate'=>25.225),....). Posléze se už jen zdrojová měna přepočte na koruny a trojčlenka nám vyhodí kýžené číslo
$struct = array();
foreach ($data as $item)
{
$t = explode("|",$item);
$struct[$t[3]] = array(‘amount’=>$t[2],‘rate’=>str_replace(‘,’,‘.’,$t[4]));
}
if($src != ‘CZK’) $inczk = (double)$amount/$struct[$src][‘amount’]*$struct[$src][‘rate’];
else $inczk = $amount;
if($tar != ‘CZK’) $div = (double)$struct[$tar][‘rate’]*$struct[$tar][‘amount’];
else $div = 1;
return (double)$inczk/$div;
Celá funkce je k dostání tady:
{
if($src == ‘CZK’ && $tar = ‘CZK’) return $amount;
$cache = ‘./cache/cnb_’.date(‘dmY’);
if(!$data = @file($cache))
{
$uri = ‘http://www.cnb.cz/cs/financni_trhy/devizovy_trh/kurzy_devizoveho_trhu/denni_kurz.txt?date=’.date(‘d.m.Y’);
if(!$data = file($uri)) return false;
else
{
$fh = @fopen($cache,‘w+’);
@fwrite($fh,implode("\n",$data));
@fclose($fh);
}
}
$data = array_slice($data,2);
$struct = array();
foreach ($data as $item)
{
$t = explode("|",$item);
$struct[$t[3]] = array(‘amount’=>$t[2],‘rate’=>str_replace(‘,’,‘.’,$t[4]));
}
if($src != ‘CZK’) $inczk = (double)$amount/$struct[$src][‘amount’]*$struct[$src][‘rate’];
else $inczk = $amount;
if($tar != ‘CZK’) $div = (double)$struct[$tar][‘rate’]*$struct[$tar][‘amount’];
else $div = 1;
return (double)$inczk/$div;
}
Popularity: 55% [?]
