rulu ruru

post Primitivní konvertor měn dle ČNB v PHP

February 16th, 2008

Filed under: php — starenka @ 21:56
Tags: , ,

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.

$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);
    }
}

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 :)

$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;

Celá funkce je k dostání tady:

function get_xrate($amount,$src,$tar)
{
    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% [?]

ruldrurd
© starenka 2oo7, cute alien monster by noizcut, original theme by Laurentiu Piron - customized by starenka | proudly powered by WordPress