Kurzovní lístek

/ Blog / PHP / Kurzovní lístek
Článek je už starý a informace v něm nemusí být relevantní, mohou být zastaralé či dokonce již neplatné. Články nepíši, informace si poznamenávám jinam, sledovat mě můžete na Githubu, Medium či jiných "IT" síťích. 👋 V případě dotazu mi napište na e-mail či telegram (sekce kontakt).

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-&gt;spust(); } function spust() { $this-&gt;kesovat(); } function ziskejKurz($url) { $soubor = file($url); $i = 0; $kurzPole = array(); foreach ($soubor as $row) { $i++; if ($i &gt; 2) { $row = trim($row); list($zeme, $mena, $mnozstvi, $kod, $kurz) = explode(&quot;|&quot;, $row); $kurzPole[$zeme] = array($zeme, $mena, $mnozstvi, $kod, $kurz); } } return $kurzPole; } function porovnejData() { $dnesniDatum = date(&quot;d.m.Y&quot;); $vcerejsiDatum = date(&quot;d.m.Y&quot;, mktime (0,0,0, date(&quot;m&quot;), date(&quot;d&quot;) - 3,date(&quot;Y&quot;))); $dnes = $this-&gt;ziskejKurz(&quot;<a href="http://www.cnb.cz/www.cnb.cz/cz/financni_trhy/devizovy_trh/kurzy_devizoveho_trhu/denni_kurz.txt?date=$dnesniDatum">http://www.cnb.cz/www.cnb.cz/cz/financni_trhy/devizovy_trh/kurzy_devizoveho_trhu/denni_kurz.txt?date=$dnesniDatum</a>&quot;); $vcera = $this-&gt;ziskejKurz(&quot;<a href="http://www.cnb.cz/www.cnb.cz/cz/financni_trhy/devizovy_trh/kurzy_devizoveho_trhu/denni_kurz.txt?date=$vcerejsiDatum">http://www.cnb.cz/www.cnb.cz/cz/financni_trhy/devizovy_trh/kurzy_devizoveho_trhu/denni_kurz.txt?date=$vcerejsiDatum</a>&quot;); $finalData = array(); foreach ($dnes as $zeme =&gt; $pole) { // nastaveni sipky if ($dnes[$zeme][4] &gt; $vcera[$zeme][4]) $ico = &quot;<img src="up.gif" alt="" />&quot;; elseif ($dnes[$zeme][4] &quot;; else $ico = &quot;&quot;; // vypocet ceny a pretypovani $cenaDnes = (double)str_replace(&quot;,&quot;, &quot;.&quot;, $dnes[$zeme][4]); $cenaVcera = (double)str_replace(&quot;,&quot;, &quot;.&quot;, $vcera[$zeme][4]); $rozdil = $cenaDnes - $cenaVcera; //země|měna|množství|kód|kurz // finalni ulozeni rozdilovych dat $finalData[$dnes[$zeme][0]] = array( &quot;zeme&quot; =&gt; $dnes[$zeme][0], &quot;mena&quot; =&gt; $dnes[$zeme][1], &quot;mnozstvi&quot; =&gt; $dnes[$zeme][2], &quot;kod&quot; =&gt; $dnes[$zeme][3], &quot;kurz&quot; =&gt; $dnes[$zeme][4], &quot;sipka&quot; =&gt; $ico, &quot;rozdil&quot; =&gt; $rozdil ); } return $finalData; } function vykreslitTabulku() { $table = &quot;<table border="1">&quot;; $table .= &quot;<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> &quot;; foreach ($pole = $this-&gt;porovnejData() as $klic =&gt; $index) { $table .= &quot;<tr><td>&quot;.$pole[$klic][&quot;zeme&quot;].&quot;</td><td>&quot;.$pole[$klic][&quot;mena&quot;].&quot;</td><td>&quot;.$pole[$klic][&quot;mnozstvi&quot;].&quot;</td><td>&quot;.$pole[$klic][&quot;kod&quot;].&quot;</td><td>&quot;.$pole[$klic][&quot;kurz&quot;].&quot;</td><td>&quot;.$pole[$klic][&quot;sipka&quot;].&quot;</td><td>&quot;.$pole[$klic][&quot;rozdil&quot;].&quot;</td></tr> &quot;; } $table .= &quot;</table>&quot;; return $table; } function kesovat() { if (!is_file(&quot;kurzovni-listek.html&quot;) or fileMtime(&quot;kurzovni-listek.html&quot;) kesLimit)) { $file = fopen(&quot;kurzovni-listek.html&quot;, &quot;w+&quot;); fwrite($file, $this-&gt;vykreslitTabulku()); fclose($file); readfile(&quot;kurzovni-listek.html&quot;); } else { readfile(&quot;kurzovni-listek.html&quot;); } }
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>&lt;?php include(&quot;kurzy.php&quot;);
2: echo '&lt;h2?&gt;
3: Kurzovní lístek'; $k = new Kurzy(); ?&gt;
Na ukázku výpisu kurzovního listku se můžete podívat zde

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

Kategorie

  • Osobní názory - 0x
  • 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