Kurzovní lístek

/ Blog / PHP / Kurzovní lístek

Publikováno v sekci PHP v 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.

1: 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 = "![](up.gif)"; elseif ($dnes[$zeme][4] "; 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") 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

1: <meta content="text/html; charset=UTF-8" http-equiv="content-type"></meta><title>Kurzovní lístek</title><?php include("kurzy.php");
2: echo '<h2?>
3: Kurzovní lístek'; $k = new Kurzy(); ?>
Na ukázku výpisu kurzovního listku se můžete podívat [zde](/kurzovni-listek/index.php)

[link]kurzovni-listek.zip[/link]

Kategorie

  • Osobní názory - 1x
  • PHP - 9x
  • MYSQL - 4x
  • CSS - 7x
  • jQuery - 3x
  • Sociální síť - 1x
  • Nette - 5x
  • Tipy & triky - 3x
  • Twitter Bootstrap - 1x
  • Týdenní tipy a novinky - 4x
  • SCSS - 1x
  • GIT - 1x
  • Gulp - 1x

  • Komentáře (8x)

    #1 reagovat kuba:
    ahoj, jak prosímte udělám z toho tvého scriptu aby se mi vypsaly jen některé měny? dík
    #2 reagovat Roman Janko:
    [1] kuba Snadno, staci si nadefinovat pole men ktere chces zobrazit, a potom to zohlednit v metode ktera bud data ziskava ( ziskas jen ty ktere chces ) nebo ktera je vykresluje ...
    #3 reagovat kuba:
    [2] Roman Jankojo dík, už jsem to vyřešil, sice ne přes pole, ale trošku kostrbatě přes číslo řádku měny
    #4 reagovat Roman Janko:
    [3] kuba To bych nedelal, kdyby zmenili treba razeni men a napr. EURO by se z radku 5 presunulo na radek 8 tak by ti to nevyslo .. zkus to pres to pole, bude to univerzalnejsi
    #5 reagovat Milan:
    Ahoj taky jsem si s timhle hral, sipecky teda neumi ale za to si myslim ze ma hodne veci navic :)
    http://addons.nette.org/cs/cnb funguje i bez Nette frameworku
    #6 reagovat Roman Janko:
    [5] Milan Tak to rozhodne, je to napsane mnohem lepe a ma to mnohem vice funkcionality :), ten muj skript byla rychlovka na 20 min a je to stare 1,5 roku , podle toho to taky vypada :)

    U tveho bude mit mozna zacatecnik trosku problem se v tom zorientovat, je k tomu pribaleno moc trid ... jinak je to pekne co jsem koukal.
    Dobrý den,
    mohl byste tento návod aktualizovat?

    Děkuji
    #8 reagovat Taps:
    [7] navikk
    Je potřeba jen upravit url adresu místo http://www.cnb.cz/www.cnb.cz/cz/financni_trhy/devizovy_trh/kurzy_devizoveho_trhu/denni_kurz.txt?date=

    použij
    http://www.cnb.cz/cs/financni_trhy/devizovy_trh/kurzy_devizoveho_trhu/denni_kurz.txt?date=

    Vložit nový komentář


    • na jiné komentáře odkazujte pomocí odkazu reagovat
    • vaše IP adresa bude zaznamenána
    • používají se gravatary
    • můžeme si tykat
    • HTML tagy vypnuty. PHP kód se také neprovede. Pokud potřebuju přiložit ukázku vašeho kódu, použijete službu pastebin
    • vulgární, rasistické či jinak nepřípustné komentáře budou smazány