Vypis aktualni teploty v zadanem meste z Foreca.cz

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. 🙂

Prehled pocasi na Foreca.cz
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

 

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *