Tak będzie wyglądał nasz banner pogodowy
Kilka przydatnych informacji
Banner wykorzystuje plik realtime.txt generowany przez program Cumulus. Cumulus to darmowe oprogramowanie do pobierania, przechowywania i wyświetlania danych z popularnych elektronicznych stacji pogodowych takich jak np. Davis Vantage, FOE WH1080/2080/3080, Oregon Scientific i innych.
Plik realtime.txt to jednoliniowy plik tekstowy z aktualnymi danymi pogodowymi, które są odczytywane z sensorów stacji meteo. Dane pogodowe są oddzielane spacjami, przykładowa linia może wyglądać tak:
08-05-12 21:48:19 14.7 85 12.2 0.2 0.0 45 0.0 0.0 1011.3 NE 0 km/h C hPa mm 37.1 +0.1 27.6 280.2 0.0 23.7 54 14.7 -0.6 20.3 10:35 12.7 07:02 5.6 11:55 14.8 11:33 1014.0 00:00 1010.8 18:46 1.9.2 1031 2.5 14.7 17.0 0.0 0.0 0 44 0.0 5 0 0 NE 310 m 15.3 0.0 0 0
Aby plik był generowany, w programie Cumulus należy zaznaczyć w konfiguracji "Internet Settings" opcje "enable realtime" i podać w "realtime intervals" jak często plik ma być aktualizowany - np. co 300 sekund (5 minut).
Opis kodu skryptu bannera pogodowego
Cały skrypt i tło graficzne znajdziecie na końcu artykułu w załącznikach. Kod skryptu po pobraniu zapisujemy w pliku o rozszerzeniu .php. W naszym przykładzie będzie to plik "pogoda_baner.php". Załączony plik tła zapisujemy jako "tlo.png".
Najpierw podajemy adres URL do naszego pliku realtime.txt np.:
$url='http://jakas_domena.pl/realtime.txt’;
Odczytujemy plik realtime.txt, rozdzielamy wartości i wczytujemy do tablicy.
$realtime=@file_get_contents($url);
if(empty($realtime))
{
exit;
}
$pogoda=explode(' ',trim($realtime));
Tworzymy oddzielne zmienne dla symbolu °C i °, zamieniamy encje stopnia na odpowiedni znak.
$symbol_temp=html_entity_decode('°'.$pogoda['14']);
$symbol_stop=html_entity_decode('°');
Tworzymy dane pogodowe do wyświetlenia na bannerze. Jeżeli chcemy się odwołać do 1 wartości z pliku realtime.txt to robimy to tak $pogoda['0'].
$tytul='Pogoda w górach (800m n.p.m.)';
$tekst1='Temperatura: '.$pogoda['2'].$symbol_temp.' (zmiana '.$pogoda['25'].$symbol_temp.')';
$tekst2='Temperatura odczuwalna: '.$pogoda['24'].$symbol_temp;
$tekst3='Wilgotność: '.$pogoda['3'].'%';
$tekst4='Punkt rosy: '.$pogoda['4'].$symbol_temp;
$tekst5='Ciśnienie: '.$pogoda['10'].$pogoda['15'].' (zmiana '.$pogoda['18'].$pogoda['15'].')';
$tekst6='Wiatr: '.$pogoda['6'].$pogoda['13'].' '.$pogoda['11'].' ('.$pogoda['7'].$symbol_stop.') '.$pogoda['12'].' Beauforta';
$tekst7='Wiatr porywy: '.$pogoda['40'].$pogoda['13'];
$tekst8='Deszcz: '.$pogoda['9'].$pogoda['16'];
$tekst9='Data: '.$pogoda['0'].' '.$pogoda['1'];
Tworzymy obrazek PNG z pliku tlo.png, plik musi być umieszczony w tym samym katalogu co skrypt.
header('Content-type: image/png');
$im=imagecreatefrompng('tlo.png');
Jeżeli nie chcemy korzystać z wcześniej przygotowanej grafiki zamieniamy powyższe linie na:
header('Content-type: image/png');
$im = imagecreatetruecolor(320, 205);
Deklarujemy kolory, które zamierzamy wykorzystać.
$kolor['czarny'] = imagecolorallocate($im, 0, 0, 0);
$kolor['czerwony'] = imagecolorallocate($im,255,0,0);
$kolor['czerwony2'] = imagecolorallocate($im,162,64,51);
$kolor['zielony'] = imagecolorallocate($im,51,255,34);
$kolor['bialy'] = imagecolorallocate($im, 255,255,255);
$kolor['szary'] = imagecolorallocate($im, 197,216,221);
$kolor['niebieski'] = imagecolorallocate($im,153,204,255);
$kolor['zolty'] = imagecolorallocate($im,255,255,48);
$kolor['zolty2'] = imagecolorallocate($im,255,255,145);
$kolor['zolty3'] = imagecolorallocate($im,255,204,0);
$kolor['rozowy'] = imagecolorallocate($im,255,0,102);
$kolor['fiolet'] = imagecolorallocate($im,0,0,128);
Kolorujemy tło tytułu.
imagefilledrectangle( $im, 1 ,1, 235, 20 ,$kolor['rozowy']);
Dodajemy obwódkę do grafiki.
imagerectangle( $im, 0 ,0, 319, 204 ,$kolor['rozowy']);
imagerectangle( $im, 1 ,1, 318, 203 ,$kolor['rozowy']);
Nakładamy na obrazek informacje pogodowe.
imagestring($im, 4, 5, 2, $tytul, $kolor['bialy']);
imagestring($im, 4, 5, 25, $tekst1, $kolor['zielony']);
imagestring($im, 4, 5, 45, $tekst2, $kolor['zielony']);
imagestring($im, 4, 5, 65, $tekst3, $kolor['zielony']);
imagestring($im, 4, 5, 85, $tekst4, $kolor['zielony']);
imagestring($im, 4, 5, 105, $tekst5, $kolor['niebieski']);
imagestring($im, 4, 5, 125, $tekst6, $kolor['zolty']);
imagestring($im, 4, 5, 145, $tekst7, $kolor['zolty']);
imagestring($im, 4, 5, 165, $tekst8, $kolor['zolty2']);
imagestring($im, 4, 5, 185, $tekst9, $kolor['bialy']);
Wyświetlamy obrazek w przeglądarce.
imagepng($im);
imagedestroy($im);
Aby wyświetlić banner na stronie WWW dodajemy poniższą linię.
<img src="http://adres_strony.pl/pogoda_baner.php" alt="Mój Banner Pogodowy" />
Dodanie prognozy pogody - modyfikacja kodu
Jeżeli na bannerze chcemy umieścić także prognozę pogody znajdującą się w pliku Strings.ini, to dodajemy do skryptu poniższą funkcję.
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];
}
Tworzymy nową linie tekstową i dodajemy kolejną linię nakładającą tekst na obrazek (imagestring) np.:
$tekst10=prognoza_pogody($pogoda['48']);
imagestring($im, 4, 5, 205, $tekst10, $kolor['bialy']);
Oczywiście, musimy przygotować nowy pliku tlo.png o innych wymiarach. Jeżeli nie chcemy korzystać z zewnętrznego pliku grafiki to trzeba zmienić wymiary obrazka np. na:
$im = imagecreatetruecolor(320, 225);
Trzeba też zmienić wszystkie współrzędne x i y w funkcjach: imagestring, imagerectangle, imagefilledrectangle.
Wykorzystanie własnej czcionki - modyfikacja kodu
Aby nasz baner był jeszcze ładniejszy, możemy wykorzystać dowolną czcionkę TrueType np. jedną z czcionek Windows.
Kod nakładający informacje pogodowe z imagestring zamieniamy na poniższy:
$font='./arial.ttf';
imagettftext($im, 14, 0, 5, 17, $kolor['bialy'], $font, $tytul);
imagettftext($im, 11, 0, 5, 38, $kolor['zielony'], $font, $tekst1);
imagettftext($im, 11, 0, 5, 58, $kolor['zielony'], $font, $tekst2);
imagettftext($im, 11, 0, 5, 78, $kolor['zielony'], $font, $tekst3);
imagettftext($im, 11, 0, 5, 98, $kolor['zielony'], $font, $tekst4);
imagettftext($im, 11, 0, 5, 118, $kolor['niebieski'], $font, $tekst5);
imagettftext($im, 11, 0, 5, 138, $kolor['zolty'], $font, $tekst6);
imagettftext($im, 11, 0, 5, 158, $kolor['zolty'], $font, $tekst7);
imagettftext($im, 11, 0, 5, 178, $kolor['zolty2'], $font, $tekst8);
imagettftext($im, 11, 0, 5, 198, $kolor['bialy'], $font, $tekst9);
$font to nazwa naszej czcionki TrueType wgranej do katalogu ze skryptem. Tekst w funkcji imagettftext musi być w kodowaniu UTF-8.
Format pliku realtime.txt
Poniżej znajdziecie szczegółowy opis formatu pliku realtime.txt. Index to numer elementu w tablicy $pogoda.
Index Przykład Opis
0 2019-08-09 Data (zawsze dd / mm / rr)
1 16:03:45 Czas (zawsze hh: mm: ss)
2 8,4 Temperatura zewnętrzna
3 84 Wilgotność względna
4 5,8 Punkt rosy
5 24,2 Prędkość wiatru (średnia)
6 33 Ostatni odczyt prędkości wiatru
7 261 Kierunek wiatru (stopnie)
8 0 Aktualny deszcz (za godzinę)
9 1 Deszcz dzisiaj
10 999,7 Ciśnienie atmosferyczne
11 W Aktualny kierunek wiatru (kierunki kompasu)
12 6 Prędkość wiatru w skali Beauforta
13 kmh Jednostka wiatru - m / s, mph, km / h, kts
14 C Jednostka temperatury - stopień C, F
15 hPa Jednostka ciśnienia - mb, hPa, in
16 mm Jednostka deszczu - MM, in
17 146,6 Wind Run (dzisiaj)
18 +0.1 Wartość tendencji ciśnienia
19 85,2 Miesięczne opady deszczu
20 588,4 Roczne opady deszczu
21 11,6 Wczorajsze opady deszczu
22 20,3 Temperatura wewnątrz
23 57 Wilgotność wewnętrzna
24 3,6 Temperatura odczuwalna
25 -0,7 Wartość trendu temperatury
26 10,9 Dzisiejsza temperatura maksymalna
27 12:00 Czas dzisiejszej temperatury maksymalnej (hh: mm)
28 7,8 Dzisiejsza temperatura minimalna
29 14:41 Czas dzisiejszej temperatury minimalnej (hh: mm)
30 37,4 Dzisiejsza maksymalna prędkość wiatru (średnia)
31 14:38 Czas dzisiejszej maksymalnej prędkości wiatru (średnia) (hh: mm)
32 44 Dzisiejsze maksymalne porywy wiatru
33 14:28 Czas dzisiejszych maksymalnych porywów wiatru (hh: mm)
34 999,8 Dzisiejsze maksymalne ciśnienie
35 16:01 Czas dzisiejszego maksymalnego ciśnienia (gg: mm)
36 998,4 Dzisiejsze minimalne ciśnienie
37 12:06 Czas dzisiejszego minimalnego ciśnienia (gg: mm)
38 1.8.7 Wersja Cumulusa
39 819 Cumulus numer kompilacji
40 36 10-minut, maksymalne porywy wiatru
41 10,3 Wskaźnik ciepła (heat index)
42 10,5 humidex
43 13 UV Index
44 0,2 ewapotranspiracja dzisiaj
45 14 Promieniowanie słoneczne W/m2
46 260 10-minut, średni kierunek wiatru (w stopniach)
47 2,3 Opady deszczu z ostatniej godziny
48 3 Numer bieżącej prognozy zgodnie z plikiem Strings.ini. Jeśli prognoza nie jest dostarczana przez stację i nie jest generowana przez Cumulusa to zwracana jest wartość 0 (zero)
49 1 Flaga wskazująca, że lokalizacja stacji pogodowej jest obecnie w świetle dziennym (1 = tak, 0 = Nie)
50 1 Flaga wskazująca czy stacja straciła kontakt ze zdalnymi czujnikami - tylko dla stacji FOE, (1 = Tak, 0 = Nie)
51 NNW Średnia kierunek wiatru
52 2040 Podstawa chmur
53 ft Jednostka podstawy chmur
54 12,3 Pozorna temperatura
55 11,1 Słoneczne godziny do tej pory dzisiaj
56 420,1 Aktualne teoretyczne maksymalne promieniowanie słoneczne
57 1 Czy jest słonecznie? 1 jeśli świeci słońce, inaczej 0
Autor: Parasol (Stacje-Pogody.pl)