Nekdy se muze hodit znat aktualni teplotu v urcitem meste. Nektera mesta, jako treba Jicin maji vlastni webovy teplomer. Na webu obechnanice.cz jsem se dozvedel o skvele sluzbe Foreca.cz. Problem je, ze krome aktualni teploty (tu potrebuju) vidim i spoustu dalsich udaju. Nastesti jde teplota ze stranky jednoduse vytahnout. 🙂
Na strance je spousta zbytecnych udaju
Napsal jsem jednoduchy skript v bashi, ktery stahne stranku a vypise teplotu. Soubor zjistit-teplotu:
#!/bin/bash STAT=$1 MESTO=$2 echo $STAT echo $MESTO wget -q -O - http://www.foreca.cz/$STAT/$MESTO | \ grep '<span class="warm txt-xxlarge"><strong>' | \ sed -e 's/<[^>]*>//g' | \ sed 's/\s*//'
Pouziti je nasledujici: ./zjistit-teplotu „Czech_Republic“ „Jicin“
umisteni se pise bez carek a hacku.
Uzivatele Linuxu muzou skript normalne spustit. Uzivatele Windows musi mit programy sed, wget a grep – melo by stacit nainstalovat si cygwin.
Zajima-li vas jak, jsem k tomu dosel, zobrazte si zdojovy kod stranky s teplotou:
a tam to najdete 🙂
Webove rozhrani pro ziskani teploty
Pouziti z prikazoveho radku je pekne, ale uzivatelsky prijemnejsi je pouzit jednoduche webove rozhrani.
Vzhled muze byt libovolny:
Soubor index.php:
<?php $stavZpracovani = $_REQUEST["zadanoMisto"]; $stat = $_REQUEST["stat"]; $mesto = $_REQUEST["mesto"]; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs"> <head> <meta http-equiv="content-language" content="cs" /> <meta name="language" content="cs" /> <meta http-equiv="cache-control" content="no-cache" /> <meta http-equiv="pragma" content="no-cache" /> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>Aktualni teplota <?php if ($_REQUEST["zadanoMisto"] == "ano") {echo "v $stat $mesto";}?></title> <style type="text/css"> .ramecek { margin: 1em; } </style> </head> <body> <div id="teplota"> <?php if ($stavZpracovani == "ano") { $spustit = "./zjistit-teplotu"." ".$stat." ".$mesto; echo exec ($spustit); } ?> </div> <div id="zadat" style="<?php if ($_REQUEST["zadanoMisto"] == "ano") {echo "display: none;";}?>"> <h1>Aktualni teplota z <a href="http://www.foreca.cz">FORECA.CZ</a></h1> <div> <fieldset> <legend>Zjistit teplotu v:</legend> <form method="get" action="<?php echo ($_SERVER["PHP_SELF"]);?>"> <p> <label class="povinne">Stát <input type="text" name="stat" value="Czech_Republic" /> </label> <label class="povinne">Město <input type="text" name="mesto" value="Jicin" /> </label> <input type="hidden" name="zadanoMisto" value="ano" /> <input type="submit" value="Zjistit teplotu" /> </p> </form> <div class="ramecek"> <p>Zadejte udaje stejne jako na ukazce:</p> <img src="foreca.png" alt="Ukazka vstupu" width="338" height="117" /> </div> </fieldset> </div> </div> </body> </html>
pro vyse uvedeny soubor je potreba zakazat cache, sice v nem jsou uvedene meta tagy, ale chcete-li mit jeste vetsi jistotu, pouzijte soubor .htaccess (pro webserver Apache):
<Files ~ "\.(php)$"> FileETag None <IfModule mod_headers.c> Header unset ETag Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate" Header set Pragma "no-cache" Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT" </IfModule> </Files>
Cely kod je vicemene jasny. Do poli stat a mesto se zadava stejna hodnota jako je v adresa na foreca.cz:
Je take mozne pouzit tento formular, nebo zjistit teplotu primym zadanim odkazu:
http://localhost/index.php?stat=Czech_Republic&mesto=Jicin&zadanoMisto=ano
Dulezita je cast s promennymi. Stat a mesto jsou jasne, jestlize je v promenne zadanoMisto hodnota ano, nevykresli se rozhranni pro zadani umisteni – formulari se priradi CSS display: none. Je tak mozne pomoci iframe (nebo treba php include) vlozit teplotu na sve vlastni stranky.
Vlozeni do stranky muze vypadat nasledovne:
<iframe src="http://example.net/pocasi/index.php?stat=Czech_Republic&mesto=Jicin&zadanoMisto=ano" width="20" height="20"> </iframe>
Cely kod si muzete stahnout v zip [14kB].
Navod slouzi pouze jako ukazka. Chcte-li takto zjistovat teplotu, meli byste se dohodnout s foreca.cz
Po nejake dobe muze Foreca.cz zmenit kod svych stranek a pak to nemusi fungovat.
Testovano 22. cervence 2011