Pogoda - skrypt (bash)

Wszystko Off Topic
sigo
Junior Member
Posty: 501
Rejestracja: 21 marca 2009, 19:12

Pogoda - skrypt (bash)

Post autor: sigo »

0. Changelog:
  • 15 lipca 2009: Ze względu na wakcje, okres kilku dni przedłuża się jednak w czasie; wkrótce skończę.
    8 lipca 2009: W ciągu kilku dni poprawię skrypt (głównie pod względem zewnętrznym) oraz zmienię używane oprogramowanie (przeglądarkę, na wgeta lub curl-a).
    8 lipca 2009: Poprawiony bug, wskazany przez użytkownika Wieloryb.
    30 czerwca 2009: Utworzenie pierwszej wersji skryptu.
1. Informacje:
Napisałem skrypt sprawdzający pogodę (maksymalną i minimalną temperaturę, prędkość wiatru, ilość opadów - deszcz i śnieg, ciśnienie, godzina wschodu i zachodu słońca) dla dowolnego miasta na świecie; osobiście używam go w conky'm.

Skrypt wykorzystuje serwis http://pogoda.money.pl/, który udostępnia dane pogodowe dla ponad 200 polskich miast i wielu innych, zagranicznych miejscowości.

Manual znajduje się w samym skrypcie.

Zauważone błędy proszę zgłaszać w tym temacie lub poprzez wysłanie prywatnej wiadomości (preferuję drugą możliwość).

2. Backup:
Tymczasowo brak.

3. Skrypt:

Kod: Zaznacz cały

#!/bin/bash

# Autor: sigo.
# Licencja: GNU GPL v3.

# Informacje.
# Skrypt sprawdzający dane pogodowe na bieżący i następny dzień, wykorzystujący
# serwis [url]http://pogoda.money.pl/[/url].
# Do użycia skryptu, wymagana jest przeglądarka tekstowa. Testowane były 'w3m'
# oraz 'elinks'. Inne, które powinny działać to: 'lynx', 'links' oraz 'links2'.

# Użycie.
# By móc używać skryptu, należy wskazać dla jakiego miasta będzie sprawdzana
# pogoda.
# 1. Wchodzimy na stronę [url]http://pogoda.money.pl/[/url]
# 2. Wybieramy dowolne miasto; oczywiście nie musi być to polska miejscowość.
# 3. Kopiujemy z adresu url, ciąg znaków po slashu (bez końcówki .html).
#    Przykładowo, dla Warszawy, adres url wygląda tak:
#    [url]http://pogoda.money.pl/warszawa,miasto,178.html[/url]
#    kopiujemy ciąg znaków 'warszawa,miasto,178' i wklejamy go do zmiennej
#    $city.
# 4. Po modyfikacji, zapisujemy plik.
# Przed uruchomieniem skryptu należy pamiętać o nadaniu prawa wykonywalności.

# Działanie.
# Skrypt, za pomocą tekstowej przeglądarki, (domyślnie 'w3m') odwiedza stronę
# z pogodą. Następnie pobiera potrzebne dane i zapisuje je w dwóch plikach:
# 'today' oraz 'tomorrow', które umieszcza w katalogu określonym w
# $tmpdir (domyślnie '/tmp/weather').
# Po zakończeniu działania, skrypt usuwa utworzony przez siebie katalog.

# Konfiguracja.
city="warszawa,miasto,178"
browser="w3m"
tmpdir=/tmp/weather

# Skrypt.
# Utworzenie tymczasowego katalogu.
mkdir ${tmpdir}

# Odwiedzenie strony z pogodą.
${browser} -dump "http://pogoda.money.pl/${city}.html" | grep -iA9 'dziś' | \
  tail -n8 > ${tmpdir}/today
${browser} -dump "http://pogoda.money.pl/${city}.html" | grep -iB9 'jutro' | \
  head -n8 > ${tmpdir}/tomorrow

# Przypisanie danych pogodowych do zmiennych.
todMax=`grep -i max ${tmpdir}/today | awk '{print $3}'`
todMin=`grep -i min ${tmpdir}/today | awk '{print $3}'`
todWind=`grep -i wiatr ${tmpdir}/today | awk '{print $3}'`
todRain=`grep -i deszcz ${tmpdir}/today | awk '{print $2" "$3}'`
todSnow=`grep -i śnieg ${tmpdir}/today | awk '{print $2" "$3}'`
todPressure=`grep -i ciśnienie ${tmpdir}/today | awk '{print $2}'`
todSunrise=`grep -i wsch ${tmpdir}/today | awk '{print $3}'`
todSunset=`grep -i zach ${tmpdir}/today | awk '{print $3}'`

tomMax=`grep -i max ${tmpdir}/tomorrow | awk '{print $3}'`
tomMin=`grep -i min ${tmpdir}/tomorrow | awk '{print $3}'`
tomWind=`grep -i wiatr ${tmpdir}/tomorrow | awk '{print $3}'`
tomRain=`grep -i deszcz ${tmpdir}/tomorrow | awk '{print $2" "$3}'`
tomSnow=`grep -i śnieg ${tmpdir}/tomorrow | awk '{print $2" "$3}'`
tomPressure=`grep -i ciśnienie ${tmpdir}/tomorrow | awk '{print $2}'`
tomSunrise=`grep -i wsch ${tmpdir}/tomorrow | awk '{print $3}'`
tomSunset=`grep -i zach ${tmpdir}/tomorrow | awk '{print $3}'`

# Wyświetlenie danych pogodowych.
echo "Dziś:"
echo "Temperatura: ${todMin}°C - ${todMax}°C"
echo "Wiatr: ${todWind}km/h"
echo "Deszcz: ${todRain}"
echo "¦nieg: ${todSnow}"
echo "Ciśnienie: ${todPressure}hPa"
echo "Wschód słońca: ${todSunrise}"
echo "Zachód słońca: ${todSunset}"
echo
echo "Jutro:"
echo "Temperatura: ${tomMin}°C - ${tomMax}°C"
echo "Wiatr: ${tomWind}km/h"
echo "Deszcz: ${tomRain}"
echo "¦nieg: ${tomSnow}"
echo "Ciśnienie: ${tomPressure}hPa"
echo "Wschód słońca: ${tomSunrise}"
echo "Zachód słońca: ${tomSunset}"

# Usunięcie utworzonego katalogu.
rm -rf ${tmpdir}
4. Przykładowy wynik użycia:

Kod: Zaznacz cały

Dziś:
Temperatura: 18°C - 27°C
Wiatr: 7km/h
Deszcz: brak 
¦nieg: brak 
Ciśnienie: 1016.6hPa
Wschód słońca: 04:18
Zachód słońca: 21:00

Jutro:
Temperatura: 17°C - 27°C
Wiatr: 13km/h
Deszcz: 1.3 mm
¦nieg: brak 
Ciśnienie: 1018.8hPa
Wschód słońca: 04:18
Zachód słońca: 21:00
PhockouS

Post autor: PhockouS »

Taki skrypt istnieje od bardzo dawna i nazywa się pogodynka :P
yantar
Member
Posty: 1225
Rejestracja: 07 czerwca 2007, 21:15
Lokalizacja: Rzeszów

Post autor: yantar »

PhockouS pisze:Taki skrypt istnieje od bardzo dawna i nazywa się pogodynka :P
Pogodynka nie zadziała dla każdego maista.
Awatar użytkownika
Wieloryb
Posty: 51
Rejestracja: 27 kwietnia 2008, 01:53

Post autor: Wieloryb »

Zmień wyświetlanie jutrzejszej maksymalnej temperatury, bo jest zła nazwa zmiennej :)

Na pewno skorzystam, dziiękuję.
ODPOWIEDZ