Napisałem go, gdyż nie mogłem znaleźć nic konkretnego, a potrzebowałem takiego właśnie czegoś. Może się komuś przyda. A od programistów Pythona czekam na jakieś ciekawe API obsługujące tą bibliotekę

Kod: Zaznacz cały
from os.path import isfile
import urllib
import os
def get_weather(locale, temp_scale):
try:
download(locale)
except:
return 1
weather_file = open('/tmp/weather', 'r')
actual = weather_file.readline() # Pobieramy pierwszą linijkę pliku
while actual.find('<yweather:condition') == -1: #Ta pentla będzie pobierała linijki z pliku
actual = weather_file.readline() #Dopóki nie natrafi na podany fragment
weather_file.close()
os.remove('/tmp/weather') #Plik nie jest już potrzebny
important = actual.replace(' ', '\n')
important = important.split()
imp_lic = len(important)
act_lic = 0
while imp_lic != act_lic: # Pętla 'przeleci' całą linijkę i weźmie co jej trzeba
if important[act_lic] == '<yweather:condition': # To pierwszy fragmeny więc...
pass
elif important[act_lic].find('text=\"') != -1: #To pole może się składać z więcej
stat = important[act_lic] #niż jednego elementu, więc będzie
if important[act_lic+1].find('code') != -1: #analizowane do momentu wystą
stat = important[act_lic] # -pienia napisu 'code' czyli nasępnego
else: #elementu
while important[act_lic+1].find('code') == -1:
stat = stat+' '+important[act_lic+1]
act_lic = act_lic + 1
stat = stat.replace('text=\"', '').replace('\"', '') # usunięcie zbędnych znaków
elif important[act_lic].find('temp=\"') != -1:
temp = float(important[act_lic].replace('temp=\"', '').replace('\"', ''))
if important[act_lic].find('date') != -1: # mniej-więcej to samo co powyżej
date = important[act_lic]
while important[act_lic+1].find('/>') == -1:
date = date+' '+important[act_lic+1]
act_lic = act_lic + 1
date = date.replace('date=\"', '').replace('\"','')
act_lic = act_lic + 1
if temp_scale == 'C':
temp = (temp - 32)/1.8
return [stat, int(temp), date]
def download (locale): #to tylko pobieranie pliku, nic tutaj niezrozumiałego ;)
webFile = urllib.urlopen('http://weather.yahooapis.com/forecastrss?p='+locale)
localFile = open('/tmp/weather', 'w')
localFile.write(webFile.read())
webFile.close()
localFile.close()
zapisujemy to do pliku weather.py, a następnie:
Kod: Zaznacz cały
dominik@dominik-desktop:~$ python
Python 2.6.2 (release26-maint, Apr 19 2009, 01:56:41)
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import weather
>>> weather.get_weather('PLXX0029', 'C')
['Fair', 23, 'Tue, 25 Aug 2009 7:30 pm CEST']
>>>
PLXX0029 - to kod lokalizacji.
C - określenie jednostki temperatury (Wpisanie czegokolwiek innego spowoduje wyświetlenie temperatury w skali Fahrenheita, ale coś musi być podane.)
Jak już mówiłem. Czekam na jakieś ciekawe api. Pozdrawiam i życzę miłej zabawy.