kopia lustrzana https://github.com/sq9atk/sr0wx
223 wiersze
7.3 KiB
Python
Executable File
223 wiersze
7.3 KiB
Python
Executable File
#!/usr/env/python -tt
|
|
# -*- encoding=utf8 -*-
|
|
#
|
|
# Copyright 2009-2012 Michal Sadowski (sq6jnx at hamradio dot pl)
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
#
|
|
|
|
import re
|
|
import urllib
|
|
from config import prospect_mp as config
|
|
import datetime
|
|
import debug
|
|
import json
|
|
import os
|
|
lang=None
|
|
|
|
|
|
def bezpiecznaNazwa(s):
|
|
"""Zwraca "bezpieczną" nazwę dla nazwy danej rzeki/danego
|
|
wodowskazu. Ze względu na to, że w Polsce zarówno płynie
|
|
rzeka Ślęza jak i Ślęża oznaczany jest każdy niełaciński
|
|
znak"""
|
|
if str(s.__class__)=="<type 'str'>":
|
|
s=unicode(s, 'utf-8')
|
|
return s.lower().replace(u'ą',u'a_').replace(u'ć',u'c_').\
|
|
replace(u'ę',u'e_').replace(u'ł',u'l_').\
|
|
replace(u'ń',u'n_').replace(u'ó',u'o_').\
|
|
replace(u'ś',u's_').replace(u'ź',u'x_').\
|
|
replace(u'ż',u'z_').replace(u' ',u'_').\
|
|
replace(u'-',u'_').replace(u'(',u'').\
|
|
replace(u')',u'')
|
|
|
|
def downloadFile(url):
|
|
webFile = urllib.urlopen(url)
|
|
return webFile.read()
|
|
|
|
def my_import(name):
|
|
mod = __import__(name)
|
|
components = name.split('.')
|
|
for comp in components[1:]:
|
|
mod = getattr(mod, comp)
|
|
return mod
|
|
|
|
_przekroczenie = re.compile('(Delta)(?:(?:.{1,}?)Przekroczony\ stan\ (ostrzegawczy|alarmowy))?')
|
|
|
|
def pobierzOstrzezenia(domena,stacja):
|
|
global przekroczenie,debug
|
|
domena,stacja = (domena.lower(), stacja.upper())
|
|
# testowe -- nie używać na produkcji! nie siać zamętu!
|
|
#url = "http://www.biala.prospect.pl/wizualizacja/punkt_pomiarowy.php?"+\
|
|
# "prze=TUBI&rok=2010&miesiac=06&dzien=04&godzina=19&minuta=-3"
|
|
#url = "http://www.biala.prospect.pl/wizualizacja/punkt_pomiarowy.php?"+\
|
|
# "prze=TUBI&rok=2010&miesiac=06&dzien=03&godzina=23&minuta=27"
|
|
|
|
|
|
try:
|
|
url = "http://www.%s.prospect.pl/wizualizacja/punkt_pomiarowy.php?prze=%s"%(domena,stacja)
|
|
plik = downloadFile(url)
|
|
wynik = _przekroczenie.findall(plik)
|
|
if wynik[0]==('Delta', ''):
|
|
return None
|
|
elif wynik[0][1] in ('ostrzegawczy','alarmowy'):
|
|
return wynik[0][1]
|
|
else:
|
|
debug.log('PROSPECT-MP', u'Regex nie zwrócił oczekiwanych danych',\
|
|
buglevel=5)
|
|
return None
|
|
except:
|
|
debug.log('PROSPECT-MP', u'Regex nie zwrócił oczekiwanych danych',\
|
|
buglevel=5)
|
|
pass
|
|
return None
|
|
|
|
|
|
def getData(l):
|
|
data = {"data":"", "needCTCSS":False, "allOK":True,
|
|
"source":"rwd_prospect"}
|
|
|
|
if not os.path.exists('prospect_mp.json'):
|
|
stany = generuj_json(nie_zapisuj=True)
|
|
else:
|
|
stany = json.loads(unicode(open('prospect_mp.json','r').read(),'utf-8'))
|
|
|
|
if stany['ostrzegawczy']!={} or stany['alarmowy']!={}:
|
|
data['data'] += 'lokalny_komunikat_hydrologiczny '
|
|
|
|
if stany['alarmowy']:
|
|
# Sprawdzenie dla których wodowskazów mamy przekroczone
|
|
# stany alarmowe -- włącz ctcss
|
|
data['needCTCSS']=True
|
|
data['data']+=' przekroczenia_stanow_alarmowych '
|
|
for rzeka in sorted(stany['alarmowy'].keys()):
|
|
data['data']+='rzeka %s wodowskaz %s '%(bezpiecznaNazwa(rzeka), \
|
|
" wodowskaz ".join(bezpiecznaNazwa(r) for r in sorted(stany['alarmowy'][rzeka])),)
|
|
|
|
if stany['ostrzegawczy']:
|
|
data['data']+='_ przekroczenia_stanow_ostrzegawczych '
|
|
for rzeka in sorted(stany['ostrzegawczy'].keys()):
|
|
data['data']+='rzeka %s wodowskaz %s '%(bezpiecznaNazwa(rzeka), \
|
|
" wodowskaz ".join(bezpiecznaNazwa(r) for r in sorted(stany['ostrzegawczy'][rzeka])),)
|
|
|
|
if os.path.exists('prospect_mp.json'):
|
|
os.remove('prospect_mp.json')
|
|
|
|
debug.log("PODEST_MP", "finished...")
|
|
return data
|
|
|
|
def show_help():
|
|
print u"""
|
|
Uruchamiając ten skrypt z linii komend możesz wygenerować w łatwy sposób
|
|
fragment słownika sr0wx dla rzek i wodowskazów wskazanych w pliku config.py
|
|
|
|
Należy uruchomić prospect_mp podając jako parametr gen, np.
|
|
|
|
python prospect_mp.py gen > pl_google/prospect_mp_dict.py
|
|
|
|
a następnie
|
|
|
|
python google_tts_downloader.py prospect_mp_dict.py
|
|
|
|
aby dociągnąć niezbędne pliki."""
|
|
|
|
def generuj_slownik():
|
|
# generowanie listy słów słownika; ostatnie słowo (rozielone spacją)
|
|
# jest nazwą pliku docelowego
|
|
|
|
print """#!/usr/bin/python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
# Caution! I am not responsible for using these samples. Use at your own risk
|
|
# Google, Inc. is the copyright holder of samples downloaded with this tool.
|
|
|
|
# Generated automatically by prospect_mp.py. Feel free to modify it SLIGHTLY.
|
|
|
|
LANGUAGE = 'pl'
|
|
|
|
START_MARKER = 'ę. '
|
|
END_MARKER = ' k'
|
|
|
|
CUT_START = 0.9
|
|
CUT_END=0.7
|
|
|
|
download_list = [ """
|
|
|
|
frazy = []
|
|
for wpis in config.wodowskazy:
|
|
frazy.append(wpis[1])
|
|
frazy.append(wpis[2])
|
|
|
|
for fraza in set(frazy):
|
|
print "\t['ę. %s', '%s'],"%(fraza, str(bezpiecznaNazwa(fraza)),)
|
|
|
|
|
|
print """['lokalny komunikat hydrologiczny]',
|
|
['przekroczenia stanów ostrzegawczych'],
|
|
['przekroczenia stanów alarmowych'], ['rzeka'], ['wodowskaz'],
|
|
['err wu de prospekt','rwd_prospect']
|
|
]"""
|
|
|
|
|
|
def generuj_json(nie_zapisuj=False):
|
|
"""Generuje plik prospect_mp.json oraz zwraca jego zawartość. Plik te
|
|
zawiera informacje o przekroczeniach stanów ostrzegawczych i/lub
|
|
alarmowych"""
|
|
|
|
#json_file = open('prospect_mp.json','w')
|
|
|
|
|
|
stany = {'ostrzegawczy':{}, 'alarmowy':{}}
|
|
|
|
for w in config.wodowskazy:
|
|
try:
|
|
domena, rzeka, wodowskaz, stacja = w
|
|
debug.log('PROSPECT-MP', ', '.join((domena,stacja,)))
|
|
stan = pobierzOstrzezenia(domena,stacja)
|
|
|
|
# Chłyt debugowy sprawdzający, czy mamy wszystkie sample: wszystkie
|
|
# rzeki przełączamy na stan ostrzegawczy -- nie zapomnij wyłączyć!
|
|
#stan='alarmowy'
|
|
# Koniec chłytu
|
|
|
|
if stan in ('ostrzegawczy','alarmowy'):
|
|
if not stany[stan].has_key(rzeka):
|
|
stany[stan][rzeka]=[]
|
|
stany[stan][rzeka].append(wodowskaz)
|
|
except:
|
|
raise
|
|
debug.log('PROSPECT-MP', u'Pobieranie danych zakończyło się '+\
|
|
u'błędem', buglevel=5)
|
|
pass
|
|
|
|
if nie_zapisuj==False:
|
|
json.dump(stany, open('prospect_mp.json','w'))
|
|
return stany
|
|
|
|
if __name__ == '__main__':
|
|
from config import prospect_mp as config
|
|
class DummyDebug:
|
|
def log(self,module,message,buglevel=None):
|
|
pass
|
|
|
|
debug = DummyDebug()
|
|
import sys
|
|
# tak, wiem, że można to zrobić bardziej elegancko (getopt), ale dla 2
|
|
# opcji nie ma chyba sensu...
|
|
if len(sys.argv)==2 and sys.argv[1]=='gen':
|
|
generuj_slownik()
|
|
elif len(sys.argv)==2 and sys.argv[1]=='json':
|
|
generuj_json()
|
|
else:
|
|
show_help()
|