Prosty pythonowy moduł do pobierania pogody.

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
ubuproblem
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 169
Rejestracja: 30 lip 2007, 23:26
Płeć: Mężczyzna
Wersja Ubuntu: 8.04
Środowisko graficzne: GNOME

Prosty pythonowy moduł do pobierania pogody.

Post autor: ubuproblem »

Udostępniam prosty moduł w Pythonie do pobierania pogody z serwisu pogodowego Yahoo.
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()
Sposób użycia:

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']
>>> 
Symbole:
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.
Awatar użytkownika
Borsuk_
Piegowaty Guziec
Piegowaty Guziec
Posty: 13
Rejestracja: 21 sie 2009, 20:50
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: KDE Plasma
Kontakt:

Odp: Prosty pythonowy moduł do pobierania pogody.

Post autor: Borsuk_ »

Pisząc nawet tak skromny kod, warto go opatrzyć w niewielką ilość komentarzy. To naprawdę pomaga zrozumieć logikę algorytmu.
Awatar użytkownika
ubuproblem
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 169
Rejestracja: 30 lip 2007, 23:26
Płeć: Mężczyzna
Wersja Ubuntu: 8.04
Środowisko graficzne: GNOME

Odp: Prosty pythonowy moduł do pobierania pogody.

Post autor: ubuproblem »

Wiem o tym, ale przy małych aplikacjach to olewam... Później wkleję okomentowany kod.

EDIT:
Już dałem, ale bez kolorowania tekstu to się wszystko trochę klei i miesza ;)
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 31 gości