Pogoda w Pythonie
29 October 2009
Comments
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'}}
{ '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
Comment article