def getData(l): data = {"data":"", "needCTCSS":None, "allOK":True} global prognozy, zjawiskaIMGW prognozy = parseData( downloadFile(config.url) ) teraz = datetime.datetime.now( tz=pytz.timezone("Europe/Warsaw") ) potem = teraz + datetime.timedelta(hours=config.czasPrognozy) if config.podajStanPogody: data["data"] = readWeather(getCurrWeather()) data["data"] = " ".join( (data["data"], "prognoza_na_nastepne trzy godziny", readWeather(getForecast(potem))) ) data["data"] = pl.removeDiacritics(data["data"]) return data
def getData(l): data = {"data":"", "needCTCSS":True, "allOK":True} # Pobieranie danych o wodowskazach debug.log("IMGW-HYDRO", "downloading data...") command = 'links -dump http://pogodynka.pl/hydrobiuletyn.php > /tmp/imgw-hydro.tmp' if os.system(command) != 0: debug.log("IMGW-HYDRO", "Couldn't download data!", 6) return {"data":"", "needCTCSS":False, "allOK":False} hydroFile = open('/tmp/imgw-hydro.tmp') hydrobiuletyn = hydroFile.readlines() hydroFile.close() dane = [] dostepneWodowskazy = [] # odczyt danych z pliku (parsowanie) debug.log("IMGW-HYDRO", "parsing...") for line in hydrobiuletyn: if "|" in line: columns = line.split("|") if "Zbiornik" in columns[1]: break elif len(columns[2].strip())>0 and "-+-" not in columns[1]: if len(columns[1].strip())>0: dane.append( { \ "rzeka" : columns[1].strip(), \ "wodowskaz" : columns[2].strip(), \ "stanAlarmowy": columns[4].strip(), \ "stanWody" : columns[6].strip(), \ "dobowaZmiana": columns[7].strip() \ }) else: dane[-1]["wodowskaz"]+=" " + columns[2].strip() # czyszczenie nazw wodowskazów (z pliku i z konfiguracji) = ustawianie jednolitego formatu for i in range(0, len(dane)): dane[i]["rzeka"] = format(dane[i]["rzeka"]) dane[i]["wodowskaz"]= format(dane[i]["wodowskaz"]) dostepneWodowskazy.append(dane[i]["wodowskaz"]) # czy pojawiły się jakieś nowe wodowskazy? Jeśli tak to informacja idzie na debug try: # if os.path.isfile('/tmp/wodowskazy.tmp'): wodowskazyFile = open('/tmp/wodowskazy.tmp') zapisaneWodowskazy = wodowskazyFile.readlines()[0].split() noweWodowskazy = set(dostepneWodowskazy) - set(zapisaneWodowskazy) if len(noweWodowskazy) > 0: debug.log('IMGW-HYDRO', 'nowe wodowskazy: '+" ".join( (noweWodowskazy) ),1) except: debug.log('IMGW-HYDRO', 'Nie można było porównać listy wodowskazów. Było to albo wynikiem wcześniejszych błędów albo świeżej instalacji.',1) finally: # lista dostepnych wodowskazów ląduje w pliku wodowskazyFile = open('/tmp/wodowskazy.tmp', 'w') wodowskazyFile.write(" ".join( (dostepneWodowskazy) )) wodowskazyFile.close() # jeśli w konfigu podano jakiś nieistniejący w danych wodowskaz info o tym ląduje w logu i wyświetlana jest lista poprawnych nazw wodowskazów if not set(config.wodowskazy).issubset(dostepneWodowskazy): debug.log("IMGW-HYDRO", "brak danych dla wodowskazów %s"%( set(config.wodowskazy)-set(dostepneWodowskazy) ),3) debug.log("IMGW-HYDRO", "dostępne wodowskazy: %s"%(" ".join( (dostepneWodowskazy) )), 1) # przy pierwszym ostrzeżeniu wyswietlany jest nagłówek # pierwszeOstrzezenie = True rzeki = {} for wodowskaz in config.wodowskazy: for linia in dane: if wodowskaz in linia["wodowskaz"] and 'brak' not in linia.values(): if int(linia["stanWody"]) >= int(linia["stanAlarmowy"]): if not rzeki.has_key(linia["rzeka"]): rzeki[linia["rzeka"]]="" rzeki[linia["rzeka"]] += " wodowskaz %s"%(linia["wodowskaz"]) if config.podajStan and len(linia["stanWody"])>0: rzeki[linia["rzeka"]] += " " + lang.removeDiacritics(lang.cardinal(int(linia["stanWody"]))) if config.podajTendencje and len(linia["dobowaZmiana"])>0: if int(linia["dobowaZmiana"])<0: rzeki[linia["rzeka"]] += " tendencja_spadkowa " elif int(linia["dobowaZmiana"])>0: rzeki[linia["rzeka"]] += " tendencja_wzrostowa " # niewinny trick: jeśli było pierwsze ostrzezenie, to znaczy ze byly ostrzezenia i nalezy pod danymi podpisac IMGW # if rzeki != {}: # data["data"] = "komunikat_hydrologiczny imgw przekroczenia_stanow_alarmowych " # for rzeka in rzeki.keys(): # data["data"]+='rzeka ' + rzeka + rzeki[rzeka] debug.log("IMGW-HYDRO", "finished...") return data