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