Tak będzie wyglądała nasza strona pogodowa
Wstęp
Do utworzenia naszej domowej strony pogodowej, wykorzystamy w dużej części kod PHP z poprzednich artykułów - róża wiatrów, wskaźnik zegarowy.
Strona będzie składała się z dwóch plików PHP. Plik pogodynka.php będzie wyświetlał stronę, natomiast plik pogoda_zegar.php będzie generował wskaźniki zegarowe i różę wiatrów. W skryptach róży wiatrów i wskaźnika zegarowego, duża część kodu PHP była wspólna. Dlatego aby nie dublować kodu, wszystko zostało umieszczone w jednym "uniwersalnym" skrypcie pogoda_zegar.php.
Opis pliku pogodynka.php
Na początku podajemy adres do pliku realtime.txt z programu Cumulus np.:
$url = 'http://wlasna_domena.pl/realtime.txt';
Następnie plik pobieramy i wartości umieszczamy w tablicy. Robi to poniższa funkcja:
function odczyt_realtime($url)
{
$realtime=@file_get_contents($url);
if(empty($realtime))
{
exit;
}
return explode(' ',trim($realtime));
}
Opis formatu pliku realtime.txt znajduje się w artykule Jak zrobić banner wyświetlający dane ze stacji pogodowej? – nie będę tego powtarzał.
Odczytane dane z pliku realtime.txt musimy przekazać do drugiego skryptu pogoda_zegar.php, który wyświetla wskaźniki zegarowe i różę wiatrów. Realizuje to poniższa funkcja wstaw_wskaznik.
function wstaw_wskaznik($rodzaj,$wartosc,$jednostka='',$nazwa='',$min=0,$max=0)
{
if($rodzaj=='kierunek')
{
?>
<img src="pogoda_zegar.php?w=<?php echo rawurlencode($wartosc); ?>&k=1" alt="Róża wiatrów" />
<?php
}
elseif($rodzaj=='wskaznik')
{
?>
<img src="pogoda_zegar.php?w=<?php echo rawurlencode($wartosc); ?>&j=<?php echo rawurlencode($jednostka); ?>&n=<?php echo rawurlencode($nazwa); ?>&max=<?php echo $max; ?>&min=<?php echo $min; ?>" alt="<?php echo $nazwa; ?>" />
<?php
}
}
Opis funkcji wstaw_wskaznik
wstaw_wskaznik($rodzaj, $wartosc, $jednostka, $nazwa, $min, $max)
Funkcja ma 6 parametrów:
$rodzaj – może mieć dwie wartości: 'kierunek' dla róży wiatrów, 'wskaznik' dla wskaźnika zegarowego
$wartosc – wartości danego parametru pogodowego np. 25 ( dla temperatury 25°C)
$jednostka – jednostka parametru pogodowego np. °C (dla temperatury)
$nazwa – nazwa parametru pogodowego, wyświetlana na wskaźniku np. Temperatura
$min - wartość minimalna na skali wskaźnika zegarowego
$max – wartość maksymalna na skali wskaźnika zegarowego
Przykład odwołania dla wykresu zegarowego ciśnienia wygląda tak:
wstaw_wskaznik('wskaznik',$pogoda['10'],$pogoda['15'],'Ciśnienie',970,1030);
$pogoda['10'] – wartość ciśnienie atmosferycznego z pliku realtime.txt
$pogoda['15'] - jednostka ciśnienia - mb, hPa, In z pliku realtime.txt
'Ciśnienie' – opis na zegarze
970 – od tej wartości zaczyna się skala na zegarze
1030 – na tej wartości kończy się skala na zegarze
W miejscu, w którym odwołamy się do tej funkcji pojawi się nasz wskaźnik zegarowy.
Aby wyświetlić różę wiatrów wystarczy podać tylko poniższe parametry.
wstaw_wskaznik('kierunek',$pogoda['7']);
$pogoda['7'] - kierunek wiatru w stopniach z pliku realtime.txt
Wyświetlanie prognozy pogody
Wyświetlanie prognozy pogody realizuje poniższa funkcja.
function prognoza_pogody($numer)
{
$forecast['0']='Prognoza Niedostępna';
$forecast['1']='Stabilna dobra pogoda';
$forecast['2']='Dobra pogoda';
$forecast['3']='Poprawa pogody';
$forecast['4']='Dobra pogoda, coraz mniej stabilna';
$forecast['5']='Dobra pogoda, możliwe opady przelotne';
$forecast['6']='Dość dobra pogoda, poprawa';
$forecast['7']='Dość dobra pogoda, początkowo możliwe opady';
$forecast['8']='Dość dobra pogoda, później opady';
$forecast['9']='Początkowo opady, poprawa pogody';
$forecast['10']='Zmienna, poprawa pogody';
$forecast['11']='Dość dobra pogoda, opady o charakterze przelotnym';
$forecast['12']='Raczej niestabilna, później poprawa pogody';
$forecast['13']='Pogoda niestabilna, prawdopodobna poprawa pogody';
$forecast['14']='Deszczowo, okresowe przejaśnienia';
$forecast['15']='Deszczowo, coraz mniej stabilna pogoda';
$forecast['16']='Zmienna pogoda, niewielkie opady';
$forecast['17']='Niestabilna pogoda, okresowo krótkotrwała poprawa pogody';
$forecast['18']='Niestabilna pogoda, następnie opady';
$forecast['19']='Niestabilna pogoda, niewielkie opady';
$forecast['20']='Przeważnie bardzo niestabilna pogoda';
$forecast['21']='Przelotne opady, pogorszenie pogody';
$forecast['22']='Okresowo opady, bardzo niestabilna pogoda';
$forecast['23']='Opady w krótkich odstępach czasu';
$forecast['24']='Opady, bardzo niestabilna pogoda';
$forecast['25']='Burzowo, możliwa poprawa pogody';
$forecast['26']='Burzowo, duże opady';
return $forecast[$numer];
}
Odwołujemy się do niej tak.
prognoza_pogody($pogoda['48']);
$pogoda['48'] - numer bieżącej prognozy zgodnie z plikiem Strings.ini z pliku realtime.txt
Dwie proste funkcje wyświetlają porę dnia i tendencje zmian (temperatura/ciśnienie).
function pora_dnia($numer)
{
if($numer==1)
{
return 'Dzień';
}
elseif($numer==0)
{
return 'Noc';
}
}
function tendencja($wartosc)
{
if($wartosc>0)
{
return '↑';
}
elseif($wartosc<0)
{
return '↓';
}
else
{
return '→';
}
}
Wyświetlenie pory dnia na stronie wygląda tak.
pora_dnia($pogoda['49']);
$pogoda['49'] - flaga wskazująca (0,1), że lokalizacja stacji pogodowej jest obecnie w świetle dziennym (z pliku realtime.txt)
Wyświetlanie tendencji zmian na stronie wygląda podobnie, przykład dla ciśnienia.
tendencja($pogoda['18']);
$pogoda['18'] - wartość tendencji ciśnienia z pliku realtime.txt
Opis pliku pogoda_zegar.php
Skrypt zawiera kod PHP, będący połączeniem kodu róży wiatrów i wskaźnika zegarowego. Opisany został dokładnie w poprzednich częściach. Tak więc, opiszę tu tylko zmiany. Funkcja pozycja_tekstu jest identyczna jak w skrypcie wskaźnika zegarowego.
Na początku ustawiamy graficzne szablony, dla róży wiatrów i wskaźnika zegarowego. Grafikę możemy przygotować sami np. w Adobe PhotoShop. Możemy też skorzystać z załączonych poniżej lub z poprzednich części artykułu. Szablony muszą być przeźroczystymi plikami PNG (PNG-24).
$szablon['roza_tlo'] = 'kompas_tlo.png';
$szablon['roza_wskaznik'] = 'kompas_wskaznik.png';
$szablon['zegar_tlo'] = 'zegar_tlo.png';
$szablon['zegar_wskaznik'] = 'zegar_wskaznik.png';
W poniższej linii sprawdzamy, czy w odwołaniu do skryptu zostały podane wszystkie wymagane dane.
if(!(isset($_GET['w'],$_GET['j'],$_GET['n'],$_GET['min'],$_GET['max']) or (isset($_GET['k'],$_GET['w']) and $_GET['k']==1)))
{
exit;
}
W kodzie dla wskaźnika doszło sprawdzenie, czy wartość max jest większa od min. Jeżeli jest odwrotnie przerywamy skrypt - bo mamy błędne dane wejściowe.
if($min>$max)
{
exit;
}
Kod PHP przeznaczony tylko dla róży wiatrów, identyfikujemy w poniższy sposób. A kod tylko dla wskaźnika poprzez negacje tego kodu.
if(isset($_GET['k']) and $_GET['k']==1)
{
KOD PHP TYLKO DLA RÓŻY WIATRÓW
}
Autor: Parasol (Stacje-Pogody.pl)