Jak zobrazovat aktuální měnové kurzy
Chcete obohatit své stránky o informace, které se budou automaticky aktualizovat? Popíši vám to na příkladu v PHP, s jehož pomocí můžete doplnit své stránky o aktuální kurzovní lístek České národní banky.
Základním požadavkem je server, který podporuje v podstatě jakékoli server side skriptování. V tomto případě bude použito PHP, ale jak již jsem nastínil, není problém stejným postupem využít například perlovských CGI skriptů nebo ASP. Nejdůležitějším bodem naší práce bude získat aktuální kurzovní lístek, ze kterého bychom mohli vycházet. Přesně takový nabízí ke stažení ČNB na svých webových stránkách. Jeho adresa je: http://wdb.cnb.cz/CNB_TXT/KURZY.K_CURRTXT. Jedná se o obyčejný textový soubor, který vypadá zhruba následovně:
17.01.2002 #12
zeme|mena|mnozstvi|kod|kurz
Australie|dolar|1|AUD|18,904
Dansko|koruna|1|DKK|4,357
EMU|euro|1|EUR|32,375
Japonsko|jen|100|JPY|27,801
Kanada|dolar|1|CAD|22,742
MMF|SDR|1|XDR|46,028
Madarsko|forint|100|HUF|13,282
Norsko|koruna|1|NOK|4,099
Novy Zeland|dolar|1|NZD|15,467
Polsko|zloty|1|PLN|8,803
Slovensko|koruna|100|SKK|76,486
Slovinsko|tolar|100|SIT|14,704
Svedsko|koruna|1|SEK|3,489
Svycarsko|frank|1|CHF|22,080
USA|dolar|1|USD|36,717
Velka Britanie|libra|1|GBP|52,701
První řádek obsahuje datum, pro který je aktuální kurzovní lístek platný. Číslo za křížkem udává pořadové číslo kurzovního lístku v měsíci (resp. bankovní den, mezi které nepatří víkendy a státní svátky). Druhý řádek popisuje jednotlivé sloupce v následujících řádcích, kterými jsou: země, ve které měna platí, název měny, množství, kód (zkratka) měny a kurz. Trošku se pozastavím nad položkami množství a kurz. Jistě jste si všimli, že v položce kurz je uváděno pouze jedno číslo, ale ve směnárnách vídáte i šest různých hodnot (výkup, střední, nákup, valuty/devizy). V našem případě se jedná o průměrný kurz, který se může lišit od kurzu v jednotlivých bankách a směnárnách. Množství udává, kolik cizí měny dostanete za tolik Kč, kolik je uvedeno v položce kurz.
Nyní znáte strukturu i adresu souboru, takže se můžete pustit do práce, jejímž výsledkem bude úhledná HTML tabulka s přehledem kurzů pro nejdůležitější měny (americký dolar, slovenská koruna, britská libra, švýcarský frank a samozřejmě euro). Další měny v našem příkladu nepoužiji, můžete je jednoduše doplnit sami.
Funkce skriptu bude následující: Nejdříve si „sáhnete“ pro textový soubor na server ČNB, který načtete do pole (každý řádek bude v jedné položce pole). Na závěr činnosti skriptu uložíte HTML soubor, který později použijete jako include do stránek serveru.
Jelikož se kurzovní lístek mění pouze jednou denně, je zbytečné, aby se skript generující HTML tabulku s aktuálními kurzy spouštěl pokaždé, když by se měla zobrazit kurzovní tabulka. Proto ukládejte výsledek skriptu na disk do souboru. Můžete ho pak použít nesčetněkrát kdekoli bude potřeba, bez nutnosti stahovat soubor z cizího serveru (v případě nedostupnosti by docházelo ke zpomalení běhu skriptu). Z tohoto důvodu bude nejlepší tento skript spouštět automaticky například každý všední den ráno pomocí cronu (nejsem si přesně jist, v kolik hodin se soubor s kurzovním lístkem aktualizuje). Ti, kdo přístup k tomuto systémovému démonu nemají, budou muset použít jiný mechanismus spouštění skriptu.
Nejdříve si vytvořte HTML tabulku, která bude obsahovat všechny důležité údaje – v našem případě využijete pouze tři položky: kód, množství a kurz. Tabulka bude vytvořena ze dvou HTML šablon. První bude základní struktura tabulky s hlavičkou a druhá bude jeden řádek tabulky.
Šablona hlavičky tabulky
<table border=“0″ cellspacing=“0″ cellpadding=“0″ bgcolor=“#000000″>
<tr>
<td>
<table border=“0″ cellspacing=“1″ cellpadding=“2″>
<tr>
<td bgcolor=“#A0A0A0″ align=“center“ colspan=“3″> <b>
Kurzovní lístek pro den: $datum</b> </td>
</tr>
<tr>
<td bgcolor=“#A0A0A0″ align=“left“><b>Kód</b> </td>
<td bgcolor=“#A0A0A0″ align=“center“> <b>Množství
</b> </td>
<td bgcolor=“#A0A0A0″ align=“center“> <b>Kurz
</b> </td>
</tr>
$obsah
</table>
</td>
</tr>
</table>
Šablona řádku tabulky
<tr>
<td bgcolor=“#$bg“ align=“left“>$kod</td>
<td bgcolor=“#$bg“ align=“center“>$mnozstvi</td>
<td bgcolor=“#$bg“ align=“center“>$kurz</td>
</tr>
Tyto šablony si uložte na disk např. pod názvy kurz_table.html a kurz_row.html. Nyní začnete se samotným skriptem vytvářejícím tabulku s kurzy.
Definice proměnných
Ve skriptu nejdříve nadefinujte proměnné, které obsahují cesty k jednotlivým souborům na lokálním disku a zároveň nadefinujte cestu k textovému souboru obsahujícímu aktuální kurzovní lístek. Poté se pokuste tento textový soubor stáhnout a uložit jednotlivé řádky do pole, se kterým budete dále pracovat. Pokud se stažení souboru nezdaří, bude skript ukončen. Jakmile bude soubor stažen, otevřete soubory s šablonami tabulky a načtete je do proměnných.
<?
$file = „http://wdb.cnb.cz/CNB_TXT/KURZY.K_CURRTXT“;
// proměnná $file obsahuje cestu k souboru s aktuálním kurzovním lístkem
$row = „kurz_row.html“;
// cesta k souboru s šablonou řádku
$table = „kurz_table.html“;
// cesta k souboru s šablonou tabulky
$vysledek = „kurozovni_listek.html“;
// cesta k tabulce s aktuálním kurzovním lístkem
$bgs = „E0E0E0“;
// v proměnné bgs je barva světlejšího řádku v tabulce
$bgt = „C0C0C0“;
// v proměnné bgt je barva tmavšího řádku v tabulce
Získání souboru ze vzdáleného serveru
@$f = fopen($file,“r“);
// otevře soubor $file pro čtení
if (!$f) exit;
// pokud bude server nedostupný nebo nebude existovat soubor s aktuálním kurzovním lístkem, ukončí běh skriptu
while (!feof ($f))
{
// budete číst po řádcích, dokud nedojdete na konec souboru
$tmp[] = chop(fgets($f, 4096));
}
// každý řádek bude uložený jako jeden index v poli $tmp
// funkce chop odstraní z konce řádku značku pro přechod na nový řádek
@fclose($f);
// nyní již není třeba práce se souborem, proto uzavřete spojení na tento soubor
Načtení šablon tabulky
Načtěte šablony řádků a tabulky a přidejte do nich zpětná lomítka kvůli správné funkčnosti funkce eval:
@$f = fopen($row,“r“);
$radek = fread($f,1000000);
$radek = addslashes($radek);
@fclose($f);
@$f = fopen($table,“r“);
$tabulka = fread($f,1000000);
$tabulka = addslashes($tabulka);
@fclose($f);
Vytvoření tabulky – dosazení dat
Z prvního řádku souboru získáte den, pro který je kurzovní lístek určen a přiřadíte ho proměnné $datum. Poté nadefinujete pole $zobrazit obsahující čísla řádků (číslováno od jedničky) v původním souboru, které se mají ve finální HTML tabulce zobrazit. Jinými slovy, vyberete měny, které budou v tabulce obsaženy. Pro každou z položek pole $zobrazit provedete sled několika funkcí. Explode se postará o rozdělení obsahu řádku na potřebné položky (potřebujete získat kód, množství a kurz). Další funkce přiřadí proměnné $bg aktuální barvu pozadí řádku tabulky, ve kterém bude zobrazen zpracovávaný soubor. Funkcí eval pak do šablony řádku „dosadíte“ proměnné $kod, $mnozstvi, $kurz a $bg. Výsledek přidáte ke stávajícímu obsahu proměnné $obsah.
Po dokončení smyčky provedete opět funkci eval, která tentokrát dosadí do šablony tabulky proměnnou $obsah. Ve finále pak uložíte soubor na disk, abyste ho mohli používat jako include soubor.
$datum = substr($tmp[0], 0, 10);
// v prvním řádku souboru je datum, proto z prvního indexu pole vyberte prvních 10 znaků – datum ve formátu d.m.Y
$zobrazit = array(13,5,17,18,16);
// pole $zobrazit obsahuje čísla řádků v textovém souboru s kurzy získanými z ČNB, resp. se jedná o měny, které se zobrazí v tabulce
for ($i = 0; $i<count($zobrazit); $i++)
{
$tmp2 = explode(„|“,$tmp[($zobrazit[$i]-1)]);
$kod = $tmp2[3];
$mnozstvi = $tmp2[2];
$kurz = $tmp2[4];
// pro každou položku z výše uvedeného pole získáte hodnoty kód, množství a kurz; pomocí funkce eval je vložíte do šablony řádku, která se uloží v proměnné $obsah
$bg = ($i%2==1) ? $bgs : $bgt;
// nastavíte pozadí pro řádek tabulky
eval(„\$radek_tmp = \“$radek\“;“);
// do šablony řádku dosadíte proměnné…
$obsah .= $radek_tmp;
}
// …a připíšete jej do proměnné $obsah
eval(„\$tabulka = \“$tabulka\“;“);
// do šablony tabulky vložíte proměnné, konkrétně se vyevaluje proměnná $obsah
Uložení na disk
@$f = fopen($vysledek,“w“);
@fwrite($f,$tabulka);
@fclose($f);
?>
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Souboj na trhu s CPU pro servery: AMD vs. Intel
8. prosince 2023 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Praktické rady na zabezpečení redakčního systému WordPress
27. února 2023
Nejnovější
-
Jak rozšířit úložiště Macu za pětinovou cenu?
16. prosince 2024 -
Nové trendy v doménách pro osobní projekty – DIY, LIVING a LIFESTYLE
9. prosince 2024 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024
milan
Čvn 4, 2010 v 18:41Doporučuji http://addons.nette.org/cs/cnb funguje i bez frameworku a ma spoustu vychytavek
Anonym
Kvě 28, 2011 v 2:42Toto je již několik let stará věc ,která už dávno nefunguje. Soubor neexistuje.. Petr
Anonym
Kvě 29, 2011 v 21:27Anonymní: jiste, vzdyt je to z roku 2002.
M
Kvě 17, 2017 v 22:25Změnil se jen odkaz, nyní platí http://www.cnb.cz/cs/financni_trhy/devizovy_trh/kurzy_devizoveho_trhu/denni_kurz.txt?date=dnes (nebo přímo datum =17.5.2017 místo =dnes), jinak je popsaný formát stále stejný.