Pogoda w Pythonie

Dostęp do prognozy pogody, zdjęć satelitarnych i temu podobnych danych meteorologicznych to nie problem obecnie. W przypadku Pythona istnieje kilka bibliotek wykorzystujących API różnych serwisów pogodowych. Można też wyciągać dane z HTMLa pasującej nam strony z pogodą.

python-weather-api

Biblioteka python-weather-api pozwala na pobieranie prognozy z trzech źródeł - Yahoo, Google i NOAA (tylko USA). Oto przykładowy kod wykorzystujący tą bibliotekę:
# -*- coding: utf-8 -*-
import pywapi
import pprint
pp = pprint.PrettyPrinter(indent=4)
# id stacji stosowany przez Yahoo
result = pywapi.get_weather_from_yahoo('PLXX0028', 'metric')
pp.pprint(result)

# ~nazwa miasta
result = pywapi.get_weather_from_google('Warszawa')
pp.pprint(result)

Gdzie dla Yahoo musimy podać ID stacji. Na liście polskich miast wybieramy najbardziej pasujące i w linku będziemy mieć wymagane ID, np "http://www.weather.com/outlook/travel/businesstraveler/extended/PLXX0028" dla Warszawy, gdzie PLXX0028 to wspomniane ID.

W przypadku API Google Weather podajemy nazwę miasta - nie udało mi się namierzyć listy stacji meteo do których ma dostęp.

Oto przykładowy rezultat zwracany przez Yahoo:
{   'astronomy': {   'sunrise': u'6:23 am', 'sunset': u'4:15 pm'},
    'atmosphere': {   'humidity': u'93',
                      'pressure': u'1015.92',
                      'rising': u'0',
                      'visibility': u'9.99'},
    'condition': {   'code': u'29',
                     'date': u'Wed, 28 Oct 2009 11:00 pm CET',
                     'temp': u'4',
                     'text': u'Partly Cloudy',
                     'title': u'Conditions for Warsaw, PL at 11:00 pm CET'},
    'forecasts': [   {   'code': u'20',
                         'date': u'28 Oct 2009',
                         'high': u'7',
                         'low': u'2',
                         'text': u'Foggy'},
                     {   'code': u'20',
                         'date': u'29 Oct 2009',
                         'high': u'8',
                         'low': u'1',
                         'text': u'AM Fog/PM Sun'}],
    'geo': {   'lat': u'52.17', 'long': u'20.97'},
    'html_description': u'
<img src="http://l.yimg.com/a/i/us/we/52/29.gif"/><br />
<b>Current Conditions:</b><br />
Partly Cloudy, 4 C<BR />
<BR /><b>Forecast:</b><BR />
Wed - Foggy. High: 7 Low: 2<br />
Thu - AM Fog/PM Sun. High: 8 Low: 1<br />
<br />
<a href="http://us.rd.yahoo.com/dailynews/rss/weather/Warsaw__PL/*http://weather.yahoo.com/forecast/PLXX0028_c.html">Full Forecast at Yahoo! Weather</a><BR/><BR/>
(provided by <a href="http://www.weather.com" >The Weather Channel</a>)<br/>
',
    'link': u'http://us.rd.yahoo.com/dailynews/rss/weather/Warsaw__PL/*http://weather.yahoo.com/forecast/PLXX0028_c.html',
    'location': {   'city': u'Warsaw', 'country': u'PL', 'region': u''},
    'title': u'Yahoo! Weather - Warsaw, PL',
    'units': {   'distance': u'km',
                 'pressure': u'mb',
                 'speed': u'kph',
                 'temperature': u'C'},
    'wind': {   'chill': u'2', 'direction': u'300', 'speed': u'8.05'}}
A tak wyglądają dane zwracane przez Google:
{   'current_conditions': {   'condition': u'Partly Cloudy',
                              'humidity': u'Humidity: 93%',
                              'icon': u'/ig/images/weather/partly_cloudy.gif',
                              'temp_c': u'4',
                              'temp_f': u'39',
                              'wind_condition': u'Wind: NW at 5 mph'},
    'forecast_information': {   'city': u'Warsaw, Mazovia',
                                'current_date_time': u'2009-10-28 22:00:00 +0000',
                                'forecast_date': u'2009-10-28',
                                'latitude_e6': u'',
                                'longitude_e6': u'',
                                'postal_code': u'Warszawa',
                                'unit_system': u'US'},
    'forecasts': [   {   'condition': u'Partly Sunny',
                         'day_of_week': u'Wed',
                         'high': u'46',
                         'icon': u'/ig/images/weather/mostly_sunny.gif',
                         'low': u'33'},
                     {   'condition': u'Mostly Sunny',
                         'day_of_week': u'Thu',
                         'high': u'44',
                         'icon': u'/ig/images/weather/mostly_sunny.gif',
                         'low': u'32'},
                     {   'condition': u'Clear',
                         'day_of_week': u'Fri',
                         'high': u'42',
                         'icon': u'/ig/images/weather/sunny.gif',
                         'low': u'32'},
                     {   'condition': u'Mostly Sunny',
                         'day_of_week': u'Sat',
                         'high': u'42',
                         'icon': u'/ig/images/weather/mostly_sunny.gif',
                         'low': u'32'}]}

Inne źródła meteo

  • wunderground.com dostarcza sporo danych, a część z nich dostępna jest poprzez kanała RSS lub iCal. Feed RSS można łatwo parsować za pomocą modułu feedparser.
  • Na stronie peterscheurich znajdziemy zdjęcia satelitarne Europy prezentujące aktualne zachmurzenie.
  • Można też odwiedzić strony różnych polskich stacji meteo, np. stacji na wydziale Fizyki PW i niezbędne dane pobierać z treści strony.
  • libgweather dysponuje jakimś eksperymentalnym API dla Pythona, brak chyba dokumentacji do niego
RkBlog

Podstawy Pythona, 29 October 2009

Comment article
Comment article RkBlog main page Search RSS Contact