. Dole je snippet pre Etomite
(takto ho používaj na webe, tzn. že sa nebude cachovať). Postupuj podľa popisu v súbore, ak ho chceš upraviť na iné mesto.
Kód: Vybrať všetko
/*
/-----------------------------------------\
| |
-----| Počasie na stránke pomocou PHP |-----
| -------------------------------- |
| |
| Version: 1.4 beta pre RS2 SK |
| Website: www.pmasarik.info/blog/ |
| Author: Peter Masarik |
E-mail: pmasarik@pobox.sk |
| Copyright: (c) Peter Masarik, 2005 |
\-----------------------------------------/
Tento script je moje dielo na ktorom som sa začal učiť PHP, preto
možno nie sú použité tie správne programátorské postupy, ale každý
nejako začínal. Script testujem sám a preto sa môžu stále vyskytnúť
nejaké problémy. Odladený je pre METAR správy z Piešťanského letiska,
takže na inom letisku môžu kludne nastať nejaké problémy.
Script som upravil na plugin, ktorý sa dá použiť do Redakčného systému pre blog RS2.
Script je voľne šíriteľný, stále na ňom pracujem a dolaďujem.
Preto sa vám oplatí sem-tam pozrieť na stránku http://www.pmasarik.info/blog/
či nie je niečo nové. Okomentovaný je dostatočne, na to aby to pochopil
aj menej skúsený užívateľ a ak treba rád pomôžem z akýmkoľvek problémom.
Stačí napísať... :-)
Do počasia a dúfam, že dáte vedieť na akej stránke ste použili môj script.
#######################
# Skratky miest v SR: #
#######################
LZPP -- PIEŠŤANY
LZTT -- POPRAD
LZKZ -- KOŠICE
LZIB -- BRATISLAVA
#######################
# Skratky miest v ČR: #
#######################
LKPR -- Praha/Ruzyně
LKMT -- Ostrava/Mošnov
LKTB -- Brno/Tuřany
LKHO -- Holešov
LKKV -- Karlovy Vary
LKLB -- Liberec
LKKU -- Kunovice
LKKB -- Kbely
LKVO -- Vodochody ** POZOR NEFUNGUJE!!!
LKOT -- Otrokovice ** POZOR NEFUNGUJE!!!
LKPD -- Pardubice
LKCV -- Čáslav
LKNA -- Náměšť nad Oslavou
LKPO -- Přerov
Adresa s mapov ČR -- http://meteo.rlp.cz/mapa_int.htm
*/
####################################
# Tieto údaje uprav podľa nápovedy #
####################################
$skratka = "LZKZ"; // namiesto LZPP zadaj kód tvojho mesta, napríklad LKKU pre Kunovice.
$icons_folder = "icons/"; // Sem zadaj cestu k obrázkom na identifikáciu počasia
$mesto = "Kosice"; // sem napíš názov mesta kde žiješ
$nadpis = "Pocasie"; // sem napíš nadpis, ktorý sa bude zobrazovať
## svoje súradnice zistíte na adrese http://www.heavens-above.com/ ##
$latitude = "48.750"; # zemepisná dĺžka
$longitude = "17.833"; # zemepisná širka
$timezone = "+1"; # časové pásmo
## Ak chces tento script pouzivat aj inde nez v RS2 chod na samy konec a
## odstran dve lomitka pred echo ---> //echo "$sablonaNahrazeni"; uz upravene pre Etomite!
## Ak si chces zmenit vysledne HTML, chod na riadok 440 az 449 a uprav si to ako len chces
###################################################################################################
############## Ak sa nerozumieš PHP tak ďalej už sa ani nepozeraj !!! ###################
###################################################################################################
## Cookies
## Nacitanie suboru trva niekedy 1 az 5 sekund a zdrzuje to nacitanie stranky, preto ulozim na 30minut
## hodnotu do cookies aby sa stale nemusela nacitat. Takze pri bruzdani po stranke zostane 30 minut
## ta ista hodnota.
## Co ak niekto pride na stranku 5 minut pred zmenou udaju? Ma smolu 30 minut sa mu bude ukazovat
## stara hodnota. Nevidim v tom problem kedze aktualizacia je cca kazdu 1 hodinu a nejde o nic vazne.
if (!isset($_COOKIE['data_pocasie'])) {
$cesta_zdroja1 = "http://weather.noaa.gov/pub/data/observations/metar/stations/" .$skratka. ".TXT";
$fp = @fopen($cesta_zdroja1, "r");
$data = @file($cesta_zdroja1);
for($i=0; $i<count($data); $i++)
$retazec = $data{1};
setcookie ('data_pocasie', $retazec, time()+1800, '/', '', 0);
@fclose($fp);
} else {
$retazec = $_COOKIE['data_pocasie'];
}
if (!ereg ('^[A-Z]{4}$', $skratka)) { //kontrola spravne zadanej skratky
$problem = TRUE;
}
if (!isset($retazec) OR @$problem == TRUE) { // ak je problem nespusti sa script, napise chybovu hlasku
$problem = TRUE;
} else { // ak je všetko OK prebehne script
#########################
# identifikacia teploty #
#########################
$pozicia_znaku = strrpos($retazec, "/");
$pozicia_teploty = $pozicia_znaku-3;
$teplota = substr($retazec, $pozicia_teploty, 3);
$o = array("M00", "M", "00");
$n = array("0", "-", "0");
$teplota = str_replace($o, $n, $teplota);
$teplota = (int)$teplota;
############################
# identifikacia oblačnosti #
############################
// ak je CAVOK
$pozicia_cavok = strpos($retazec, "CAVOK");
$cavok = substr($retazec, $pozicia_cavok, 5);
if ($cavok == "CAVOK") {
$oblaky = array("- jasno", "0cloud");
@$oblaky_1 = $oblaky[0];
@$oblacnost_icon = $oblaky[1];
} else { $pole_oblacnost = array("SKC", "NSC", "FEW", "SCT", "BKN", "OVC");
$tmp = array();
foreach ($pole_oblacnost as $hladaj_oblacnost) {
$pozicia_oblacnost = strpos($retazec, $hladaj_oblacnost);
$oblacnost = substr($retazec, $pozicia_oblacnost, 3); //OVC
$vyska_oblacnost = substr($retazec, $pozicia_oblacnost+3, 3); //050
if (strlen($pozicia_oblacnost) > 0) {
$tmp[$vyska_oblacnost] = $oblacnost; //("050" => "OVC"
}
} //foreach
krsort ($tmp);
$tmp = array_values($tmp);
@$oblacnost = $tmp[0];
if (isset($oblacnost)) {
switch($oblacnost) {
case "SKC": $oblaky = array("- jasno", "0cloud"); break;
case "NSC": $oblaky = array("- veľmi malá oblačnosť", "1cloud_"); break;
case "FEW": $oblaky = array("- malá oblačnosť", "1cloud_"); break;
case "SCT": $oblaky = array("- polooblačno", "2cloud_"); break;
case "BKN": $oblaky = array("- oblačno", "3cloud_"); break;
case "OVC": $oblaky = array("- zamračené", "4cloud_"); break;
}
}
@$oblaky_1 = $oblaky[0];
@$oblacnost_icon = $oblaky[1];
} //else CAVOK
###############################
# Búrky a prehánky spresnenie #
###############################
$pole_burky = array("TSRA", "TSSN", "TSPE", "TSGR", "TSGS", "SHRA", "SHSN", "SHPE", "SHGR", "FZFG", "FZDZ", "FZRA");
$tmp_1 = array();
foreach ($pole_burky as $hladaj_burky) {
$pozicia_burky = strpos($retazec, $hladaj_burky);
$b = substr($retazec, $pozicia_burky, 4);
$znamienko_b = substr($retazec, $pozicia_burky-1, 1);
if (strlen($pozicia_burky) > 0) {
$tmp_1[] = $b; //TSGR
$tmp_1[] = $znamienko_b; // "+" OR "-" OR " "
}
} //foreach
@$burky = $tmp_1[0]; //TSGR
@$znamienko_burky = $tmp_1[1]; // "+" OR "-" OR " "
if (isset($burky)) {
switch($znamienko_burky) {
case "-": $znamienko_burky = "- slabá "; $znamienko_zrazky_icon = "light"; break;
case "+": $znamienko_burky = "- silná "; $znamienko_zrazky_icon = "heavy"; break;
case " ": $znamienko_burky = "- "; $znamienko_zrazky_icon = NULL; break;
}
if ($burky == "SHRA" && $znamienko_burky == "- ") { //zopar problemovych podmienok + sklonovanie
$znamienko_zrazky_icon = "mod";
$burky = array("dažďová prehánka", "rain.png");
} elseif ($burky == "FZDZ" && $znamienko_burky == "- silná ") {
$znamienko_burky = "- silné ";
$burky = array("mrznúce mrholenie", "rain.png");
} elseif ($burky == "FZDZ" && $znamienko_burky == "- slabá ") {
$znamienko_burky = "- slabé ";
$burky = array("mrznúce mrholenie", "rain.png");
} elseif ($burky == "FZRA" && $znamienko_burky == "- silná ") {
$znamienko_burky = "- silný ";
$burky = array("mrznúci dážď", "rain.png");
} elseif ($burky == "FZRA" && $znamienko_burky == "- slabá ") {
$znamienko_burky = "- slabý ";
$burky = array("mrznúci dážď", "rain.png");
} else {
switch($burky) {
case "TSRA": $burky = array("búrka so zrážkami", "thunders.png"); break;
case "TSSN": $burky = array("búrka so snežením", "thunders.png"); break;
case "TSPE": $burky = array("búrka s ľadovými jadrami", "thunders.png"); break;
case "TSGR": $burky = array("búrka s krúpami", "thunders.png"); break;
case "TSGS": $burky = array("búrka so snehovými jadrami", "thunders.png"); break;
case "SHRA": $burky = array("dažďová prehánka", "rain.png"); break;
case "SHSN": $burky = array("snehová prehánka", "snow.png"); break;
case "SHPE": $burky = array("prehánka s ľadovými jadrami", "hail.png"); break;
case "SHGR": $burky = array("prehánka s krúpami", "hail.png"); break;
case "FZFG": $burky = array("mrznúca hmla", "fog.png"); break;
case "FZDZ": $burky = array("mrznúce mrholenie", "modrain.png"); break;
case "FZRA": $burky = array("mrznúci dážď", "modrain.png"); break;
}
}//else
@$burky_1 = $burky[0];
@$zrazky_icon = $burky[1];
} // if isset($burky)
######################################
# hydrometeory zmenšujúce dohľadnosť #
######################################
if (@$burky_1 != "mrznúca hmla") {
$pole_hmla = array("FG", "BR");
foreach ($pole_hmla as $key => $hladaj_hmlu) {
$pozicia_hmla = strpos($retazec, $hladaj_hmlu);
$h = substr($retazec, $pozicia_hmla, 2); //FG alebo BR
if (strlen($pozicia_hmla) > 0) {
if ($h == "FG") $hmla_1 = array("- hmla", "fog.png");
if ($h == "BR") $hmla_1 = array("- slabá hmla", "fog.png");
}
}//foreach
}//if
@$hmla_icon = $hmla_1[1];
@$hmla = $hmla_1[0];
########################
# identifikacia zrazky #
########################
if (!isset($burky_1)) {
$pole_zrazky = array("DZ", "RA", "SN", "SG", "PE", "IC", "GR", "GS", "TS");
$tmp_2 = array();
foreach ($pole_zrazky as $key => $hladaj_zrazky) {
$pozicia_zrazky = strpos($retazec, $hladaj_zrazky);
@$z = substr($retazec, $pozicia_zrazky, 2); //PE
@$znamienko_z = substr($retazec, $pozicia_zrazky-1, 1);
if (strlen($pozicia_zrazky) > 0) {
$tmp_2[] = $z; //PE
$tmp_2[] = $znamienko_z; // "+" OR "-" OR " "
}
} //foreach
@$zrazky = $tmp_2[0]; //PE
@$znamienko_zrazky = $tmp_2[1]; // "+" OR "-" OR " "
if (isset($zrazky)) {
switch($znamienko_zrazky) {
case "-": $znamienko_zrazky = "- slabé "; $znamienko_zrazky_icon = "light"; break;
case "+": $znamienko_zrazky = "- silné "; $znamienko_zrazky_icon = "heavy"; break;
case " ": $znamienko_zrazky = "- "; $znamienko_zrazky_icon = NULL; break;
}
if ($zrazky == "RA" && $znamienko_zrazky == "- silné ") { //zopar problemovych podmienok + sklonovanie
$znamienko_zrazky = "- silný ";
$zrazky = array("dážď", "rain.png");
} elseif ($zrazky == "RA" && $znamienko_zrazky == "- slabé ") {
$znamienko_zrazky = "- slabý ";
$zrazky = array("dážď", "rain.png");
} else {
switch($zrazky) {
case "DZ": $zrazky = array("mrholenie", "rain.png"); break;
case "RA": $zrazky = array("dážď", "modrain.png"); break;
case "SN": $zrazky = array("sneženie", "snow.png"); break;
case "TS": $zrazky = array("búrka", "thunders.png"); break;
case "SG": $zrazky = array("snehové krúpky", "hail.png"); break;
case "PE": $zrazky = array("ľadové jadrá", "hail.png"); break;
case "IC": $zrazky = array("ľadové kryštáliky", "hail.png"); break;
case "GR": $zrazky = array("krúpy", "hail.png"); break;
case "GS": $zrazky = array("malé krúpky", "hail.png"); break;
}
}//else
}// isset $zrazky
@$zrazky_1 = $zrazky[0];
@$zrazky_icon = $zrazky[1];
}// !isset $burky_1
##################################
# kedy vychádza a zachádza slnko #
##################################
$yday = date("z");
$mon = date("n");
$mday = date("j");
$year = date("Y");
function is_daylight_time($time)
{ list($dom, $dow, $month, $hour, $min)
= explode(":", date("d:w:m:H:i", $time));
if ($month > 4 && $month < 10) {
$retval = 1; # od mája do septembra
} elseif ($month == 4 && $dom > 7) {
$retval = 1; # po prvom aprílovom tyzdni
} elseif ($month == 4 && $dom <= 7 && $dow == 0 && $hour >= 2) {
$retval = 1; # po 2. hodine rannej v nedelu ($dow=0) v apríli
} elseif ($month == 4 && $dom <= 7 && $dow != 0 && ($dom-$dow > 0)) {
$retval = 1; # po prvej aprílovej nedeli
} elseif ($month == 10 && $dom < 25) {
$retval = 1; # pred posledným týždňom v októbri
} elseif ($month == 10 && $dom >= 25 && $dow == 0 && $hour < 2) {
$retval = 1; # pred 2. hodinou rannou poslednú októbrovú nedeľu
} elseif ($month == 10 && $dom >= 25 && $dow != 0
&& ($dom-24-$dow < 1) ) {
$retval = 1; # pred nedeľou posledného týždňa v októbri
} else { $retval = 0; }
return($retval);}
$DST=is_daylight_time(date("U"));
if ($DST) {$timezone = ($timezone + 1);}
if ($timezone == "13") {$timezone = "-11";}
$A = 1.5708;
$B = 3.14159;
$C = 4.71239;
$D = 6.28319;
$E = 0.0174533 * $latitude;
$F = 0.0174533 * $longitude;
$G = 0.261799 * $timezone;
$R = -.0145439;
for ($i = 0; $i < 2; $i++)
{if (!$i) {$J = $A; $type = "vychádza";}
# výpočet východu slnka
else {$J = $C; $type = "zapadá"; }
# výpočet západu slnka
$K = $yday + (($J - $F) / $D);
$L = ($K * .017202) - .0574039;
$M = $L + .0334405 * sin($L);
$M += 4.93289 + (3.49066E-04) * sin(2 * $L);
if ($D == 0) {$problem = TRUE;}
while ($M < 0) {$M = ($M + $D);}
while ($M >= $D) {$M = ($M - $D);}
if (($M / $A) - intval($M / $A) == 0) {$M += 4.84814E-06;}
$P = sin($M) / cos($M);
$P = atan2(.91746 * $P, 1);
if ($M > $C) {$P += $D;}
else {if ($M > $A) {$P += $B;} }
$Q = .39782 * sin($M);
$Q = $Q / sqrt(-$Q * $Q + 1);
$Q = atan2($Q, 1);
$S = $R - (sin($Q) * sin($E));
$S = $S / (cos($Q) * cos($E));
if (abs($S) > 1) {$problem = TRUE;}
$S = $S / sqrt(-$S * $S + 1);
$S = $A - atan2($S, 1);
if ($type == 'vychádza') {$S = $D - $S ;}
$T = $S + $P - 0.0172028 * $K - 1.73364;
$U = $T - $F;
$V = $U + $G;
if ($D == 0) {$problem = TRUE;}
while ($V < 0) {$V = ($V + $D);}
while ($V >= $D) {$V = ($V - $D);}
$V = $V * 3.81972;
$hour = intval($V);
$min = intval((($V - $hour) * 60) + 0.5);
if ($type == "vychádza"){
$vychod = mktime($hour,$min,0,$mon,$mday,$year);
}
if ($type == "zapadá"){
$zapad = mktime($hour,$min,0,$mon,$mday,$year);
}
}
##################################
# identifikacia pomocou obrázkov #
##################################
@$alt = $oblaky_1; //popisok pri img v alt=""
$aktual_cas = time();
if ($aktual_cas > $vychod && $aktual_cas < $zapad) { // je noc alebo den
$noc = NULL;
} else {
$noc = "n_";
}
if (@$oblaky[0] == "- jasno" && @$hmla_icon == "fog.png") { // ak je jasno a hmla
@$obrazok = $icons_folder. $noc. "0cloud_fog.png";
} elseif (@$oblaky[0] == "- jasno"){ // ak je jasno
@$obrazok = $icons_folder. $noc. "0cloud.png";
} else {
if (@strlen($zrazky_1) > 0) { // ak sú zrážky
$obrazok = $icons_folder. $noc. $oblacnost_icon. $znamienko_zrazky_icon. $zrazky_icon;
} elseif (@strlen($burky_1) > 0 ) { // ak sú búrky
$obrazok = $icons_folder. $noc. $oblacnost_icon. $znamienko_zrazky_icon. $zrazky_icon;
} elseif (@$hmla_icon == "fog.png") { // ak je hmla
$obrazok = $icons_folder. $noc. $oblacnost_icon. $znamienko_zrazky_icon. $hmla_icon;
} else { $obrazok = $icons_folder. $noc. $oblacnost_icon. "norain.png"; // ak nie je nic
}
}//else
if (!file_exists($obrazok)) { //kontrola ci obrázok existuje
$obrazok = $icons_folder. $noc. "no_data.png";
$alt = "Obrázok nenájdený";
}
$sablonaNahrazeni = "<h3>" .$nadpis. "</h3>\n";
$sablonaNahrazeni .= "<ul class=\"no\" id=\"white\">\n";
$sablonaNahrazeni .= "\t<li>" .$mesto. "</li>\n";
$sablonaNahrazeni .= "\t<li>Teplota vzduchu: <strong>" .$teplota. "</strong> °C</li>\n";
if (isset($oblaky_1)) $sablonaNahrazeni .= "\t<li>" .$oblaky_1. "</li>\n";
if (isset($burky_1)) $sablonaNahrazeni .= "\t<li>" .$znamienko_burky. $burky_1. "</li>\n"; // ak nie su tak nic
if (isset($hmla)) $sablonaNahrazeni .= "\t<li>" .$hmla. "</li>\n"; // ak nie su tak nic
if (isset($zrazky_1)) $sablonaNahrazeni .= "\t<li>" .$znamienko_zrazky. $zrazky_1. "</li>\n"; // ak nie su tak nic
$sablonaNahrazeni .= "\t<li><img src=\"$obrazok\" alt=\"$alt\" title=\"$alt\" /></li>\n";
$sablonaNahrazeni .= "</ul>\n";
} // koniec else kontrola ci je $retazec
if (@$problem == TRUE){
$sablonaNahrazeni = "<h3>" .$nadpis. "</h3>\n";
$sablonaNahrazeni .= "<ul class=\"no\" id=\"white\">\n";
$sablonaNahrazeni .= "\t<li>Nepodarilo sa načítať údaje o počasí!!!</li>\n";
$sablonaNahrazeni .= "\t<li>Alebo si zadal zlú skratku!!!</li>\n";
$sablonaNahrazeni .= "</ul>\n";
}
return "$sablonaNahrazeni"; // výstup pre Etomite!