sr0wx/meteo_sq9atk.py

127 wiersze
4.4 KiB
Python
Executable File

#!/usr/bin/python -tt
# -*- coding: utf-8 -*-
import urllib2
import re
import logging
import pytz
from datetime import datetime
from bs4 import BeautifulSoup
import unicodedata
from sr0wx_module import SR0WXModule
class MeteoSq9atk(SR0WXModule):
"""Klasa pobierająca dane kalendarzowe"""
def __init__(self,language,service_url):
self.__service_url = service_url
self.__language = language
self.__logger = logging.getLogger(__name__)
def downloadFile(self, url):
self.__logger.info("::: Odpytuję adres: " + url)
try:
webFile = urllib2.urlopen(url, None, 30)
return webFile.read()
except URLError, e:
print e
except socket.timeout:
print "Timed out!"
return ""
def getHour(self):
time = ":".join([str(datetime.now().hour), str(datetime.now().minute)])
datetime_object = datetime.strptime(time, '%H:%M')
time_words = self.__language.read_datetime(datetime_object, '%H %M')
return time_words
def parseForecastDesc(self, html):
match = html.find_all("div", {"class":"forecastDesc"})[0].text
return self.__language.rmv_pl_chars( match.strip().replace(" ", "_").replace(",","_") )
def parseTemperature(self, html):
match = html.find_all("li")[0].find_all("span")[1]
tempText = re.sub("[^(\-){0,1}(\s){0,1}0-9]", "", match.text)
temp = self.__language.read_temperature(int(tempText))
return temp
def parseClouds(self, html):
match = html.find_all("li")[2].find_all("span")[1]
tempText = re.sub("[^0-9]", "", match.text)
temp = self.__language.read_percent(int(tempText))
return temp
def parseWind(self, html):
match = html.find_all("li")[3].find_all("span")[1]
tempText = re.sub("[^0-9]", "", match.text)
temp = self.__language.read_speed(int(tempText),"kmph")
return temp
def parsePressure(self, html):
match = html.find_all("li")[5].find_all("span")[1]
tempText = re.sub("[^0-9]", "", match.text)
temp = self.__language.read_pressure(int(tempText))
return temp
def parseHumidity(self, html):
match = html.find_all("li")[6].find_all("span")[1]
tempText = re.sub("[^0-9]", "", match.text)
temp = self.__language.read_percent(int(tempText))
return temp
def get_data(self):
self.__logger.info("::: Przetwarzam dane...\n")
rawHtml = self.downloadFile(self.__service_url)
soup = BeautifulSoup(rawHtml ,"lxml")
now = soup.find_all("li", { "id" : "wts_p0" })[0]
after = soup.find_all("li", { "id" : "wts_p3" })[0]
forecast = soup.find_all("li", { "id" : "wts_p13" })[0]
message = " ".join([ \
"stan_pogody_z_godziny", self.getHour(), \
" _ ", self.parseForecastDesc(now), \
"temperatura", self.parseTemperature(now), \
"pokrywa_chmur", self.parseClouds(now), \
"predkosc_wiatru", self.parseWind(now), \
"cisnienie", self.parsePressure(now), \
"wilgotnosc", self.parseHumidity(now), \
" _ ", "prognoza_na_nastepne","cztery", "godziny", \
" _ ", self.parseForecastDesc(after), \
"temperatura", self.parseTemperature(after), \
"pokrywa_chmur", self.parseClouds(after), \
"predkosc_wiatru", self.parseWind(after), \
"cisnienie", self.parsePressure(after), \
"wilgotnosc", self.parseHumidity(after), \
" _ ", "prognoza_na_nastepne","dwanascie", "godzin", \
" _ ", self.parseForecastDesc(forecast), \
"temperatura", self.parseTemperature(forecast), \
"pokrywa_chmur", self.parseClouds(forecast), \
"predkosc_wiatru", self.parseWind(forecast), \
"cisnienie", self.parsePressure(forecast), \
"wilgotnosc", self.parseHumidity(forecast), \
])
return {
"message": message,
"source": "",
}