Publikováno v sekci PHP v Neděli 13.1.2008 - 22:08
Pokud potřebujete mít na svých webových stránkách aktuální kurzovní lístek, není nic snažšího než si přečíst tento článek.
K získání kurzovního lístku použijeme textový výpis České národní banky. Kurzovní lístek stáhneme dvakrát. Jednou za dnešní datum, podruhé za včerejší. Porovnáme rozdíl kurzů a pak jej přehledně vypíšeme do tabulky. Abychom tuto akci neprováděli zbytečně po každém obnovení stránky, tak si data kešujeme do souboru.
class Kurzy { var $kesLimit = 3600; // 1 hodina function Kurzy() { echo $this->spust(); } function spust() { $this->kesovat(); } function ziskejKurz($url) { $soubor = file($url); $i = 0; $kurzPole = array(); foreach ($soubor as $row) { $i++; if ($i > 2) { $row = trim($row); list($zeme, $mena, $mnozstvi, $kod, $kurz) = explode("|", $row); $kurzPole[$zeme] = array($zeme, $mena, $mnozstvi, $kod, $kurz); } } return $kurzPole; } function porovnejData() { $dnesniDatum = date("d.m.Y"); $vcerejsiDatum = date("d.m.Y", mktime (0,0,0, date("m"), date("d") - 3,date("Y"))); $dnes = $this->ziskejKurz("http://www.cnb.cz/www.cnb.cz/cz/financni_trhy/devizovy_trh/kurzy_devizoveho_trhu/denni_kurz.txt?date=$dnesniDatum"); $vcera = $this->ziskejKurz("http://www.cnb.cz/www.cnb.cz/cz/financni_trhy/devizovy_trh/kurzy_devizoveho_trhu/denni_kurz.txt?date=$vcerejsiDatum"); $finalData = array(); foreach ($dnes as $zeme => $pole) { // nastaveni sipky if ($dnes[$zeme][4] > $vcera[$zeme][4]) $ico = "<img src='up.gif' />"; elseif ($dnes[$zeme][4] < $vcera[$zeme][4]) $ico = "<img src='down.gif' />"; else $ico = ""; // vypocet ceny a pretypovani $cenaDnes = (double)str_replace(",", ".", $dnes[$zeme][4]); $cenaVcera = (double)str_replace(",", ".", $vcera[$zeme][4]); $rozdil = $cenaDnes - $cenaVcera; //země|měna|množství|kód|kurz // finalni ulozeni rozdilovych dat $finalData[$dnes[$zeme][0]] = array( "zeme" => $dnes[$zeme][0], "mena" => $dnes[$zeme][1], "mnozstvi" => $dnes[$zeme][2], "kod" => $dnes[$zeme][3], "kurz" => $dnes[$zeme][4], "sipka" => $ico, "rozdil" => $rozdil ); } return $finalData; } function vykreslitTabulku() { $table = "<table border='1'>"; $table .= "<tr> <th>Země</th> <th>Měna</th> <th>Množství</th> <th>Kód</th> <th>Kurz</th> <th>Ico</th> <th>Rozdíl</th> </tr> "; foreach ($pole = $this->porovnejData() as $klic => $index) { $table .= "<tr> <td>".$pole[$klic]["zeme"]."</td> <td>".$pole[$klic]["mena"]."</td> <td>".$pole[$klic]["mnozstvi"]."</td> <td>".$pole[$klic]["kod"]."</td> <td>".$pole[$klic]["kurz"]."</td> <td>".$pole[$klic]["sipka"]."</td> <td>".$pole[$klic]["rozdil"]."</td> </tr> "; } $table .= "</table>"; return $table; } function kesovat() { if (!is_file("kurzovni-listek.html") or fileMtime("kurzovni-listek.html") < (time() - $this->kesLimit)) { $file = fopen("kurzovni-listek.html", "w+"); fwrite($file, $this->vykreslitTabulku()); fclose($file); readfile("kurzovni-listek.html"); } else { readfile("kurzovni-listek.html"); } }
Mno a třídu použijeme takto
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>Kurzovní lístek</title> </head> <body> <?php include("kurzy.php"); echo '<h2>Kurzovní lístek</h2>'; $k = new Kurzy(); ?> </body> </html>
Na ukázku výpisu kurzovního listku se můžete podívat zde
Soubor ke stažení (kurzovni-listek.zip)