Tha tòrr sheirbheisean ann a bheir seachad fiosrachadh mun aimsir, ach dè am fear air am bu chòir earbsa a bhith agad? Nuair a thòisich mi air baidhsagal gu tric, bha mi airson gum biodh am fiosrachadh as cinntiche agam mun t-sìde san àite far a bheil mi a’ rothaireachd.
B’ e a’ chiad bheachd a bh’ agam stèisean sìde beag DIY a thogail le mothachairean agus dàta fhaighinn bhuaithe. Ach cha do rinn mi “a’ chuibhle ath-thòiseachadh ”agus thagh mi fiosrachadh sìde a thathas a’ cleachdadh ann an itealain catharra mar stòr dàta dearbhte, is e sin METAR (Aithisg Meteorological Aerodrome) agus TAF (TAF - Tuairmse Port-adhair Terminal). Ann an itealain, tha beatha ceudan de dhaoine an urra ris an t-sìde, agus mar sin tha na ro-innsean cho ceart ‘s a ghabhas.
Tha am fiosrachadh seo air a chraoladh XNUMX/XNUMX le guth aig gach raon-adhair ùr san fhoirm ATIS (Seirbheis Fiosrachaidh Terminal fèin-ghluasadach) agus BHEILIDH (bhon Fhraingis. vol - itealaich agus Aimsir - aimsir). Tha a 'chiad fhear a' toirt seachad fiosrachadh mun fhìor aimsir aig an raon-adhair, agus tha an dàrna fear a 'toirt seachad ro-aithris airson an ath 24-30 uair, chan ann a-mhàin aig an raon-adhair craolaidh, ach cuideachd aig cuid eile.
Eisimpleir de ghnìomhachd ATIS aig Port-adhair Vnukovo:
Eisimpleir de mar a tha VOLMET ag obair aig Port-adhair Vnukovo
Tha e mì-ghoireasach sganair rèidio no transceiver a ghiùlan leat a h-uile uair airson an raon fhreagarrach, agus bha mi airson bot a chruthachadh ann an Telegram a leigeas leat, le cliogadh putan, an aon ro-aithris fhaighinn. Tha e co-dhiù mì-ghoireasach seirbheisiche air leth a riarachadh airson seo, a bharrachd air a bhith a’ cur iarrtasan chun sùbh-craoibhe dachaigh agad.
Mar sin, chuir mi romham an t-seirbheis a chleachdadh mar chùl-taic
Ag ullachadh cùl-taic
A 'cruthachadh gnìomh
Ann am Pannal Smachd
Às deidh don phròiseact a bhith air a chruthachadh, rachaibh chun roinn Feartan:
Put air a 'phutan Cruthaich gnìomh agus thoir an t-ainm a tha thu ag iarraidh air:
An dèidh bruthadh Cruthaich gnìomh bidh riochdachadh againn den ghnìomh chruthaichte:
Mus tòisich thu a’ cruthachadh còd ann am Python, feumaidh tu bot a chruthachadh ann an Telegram. Cha toir mi cunntas air mar a tha seo air a dhèanamh - tha stiùireadh mionaideach ann
Ag ullachadh a 'chòd
Thagh mi an National Oceanic and Atmospheric Administration (NOAA) mar thobar de dhàta earbsach. Bidh a’ bhuidheann shaidheansail seo ag ùrachadh dàta ann an àm fìor air an t-seirbheisiche aca ann an cruth TXT.
Ceangal gus dàta METAR fhaighinn (thoir an aire don chùis):
https://tgftp.nws.noaa.gov/data/observations/metar/stations/<код аэропорта по ICAO>.TXT
Anns a 'chùis agam, is e Vnukovo am port-adhair as fhaisge, is e an còd ICAO aige UUWW. Ma thèid thu chun an URL a chaidh a chruthachadh bheir thu na leanas:
2020/08/10 11:30
UUWW 101130Z 31004MPS 9999 SCT048 24/13 Q1014 R01/000070 NOSIG
Is e a’ chiad loidhne an àm a tha an ro-aithris ann an Greenwich Mean Time. Tha an dàrna loidhne na gheàrr-chunntas air an fhìor aimsir. Cha bhi duilgheadas sam bith aig pìleatan itealain catharra a bhith a’ tuigsinn dè tha an loidhne seo a’ ciallachadh, ach feumaidh sinn mìneachadh:
- [UUWW] - Vnukovo, Moscow (An Ruis - RU);
- [101130Z] - 10mh latha den mhìos, 11:30m GMT;
- [31004MPS] - stiùireadh na gaoithe 310 ceum, astar 4 m / s;
- [9999] - faicsinneachd chòmhnard 10 km no barrachd;
- [SCT048] - sgòthan sgapte/sgapte aig 4800 troigh (~1584m);
- [24 / 13] - teòthachd 24 ° C, puing drùchd 13 ° C;
- [Q1014] - cuideam (QNH) 1014 hectopascals (750 mm Hg);
- [R01/000070] - co-èifeachd adhesion air an t-sreath 01 - 0,70;
- [NOSIG] - gun atharrachaidhean mòra.
Feuch an tòisich sinn a’ sgrìobhadh còd a’ phrògraim. An toiseach feumaidh tu gnìomhan a thoirt a-steach iarrtas и pytaf:
from urllib import request
import pytaf
Sònraich na caochladairean agus ullaich an gnìomh dì-chòdaidh:
URL_METAR = "https://tgftp.nws.noaa.gov/data/observations/metar/stations/UUWW.TXT"
URL_TAF = "https://tgftp.nws.noaa.gov/data/forecasts/taf/stations/UUWW.TXT"
def parse_data(code):
code = code.split('n')[1]
return pytaf.Decoder(pytaf.TAF(code)).decode_taf()
Gluaisidh sinn air adhart gu TAF (tha cùis cudromach cuideachd).
https://tgftp.nws.noaa.gov/data/forecasts/taf/stations/<код аэропорта по ICAO>.TXT
Mar a bha san eisimpleir roimhe, leig dhuinn sùil a thoirt air an ro-aithris aig port-adhair Vnukovo:
2020/08/10 12:21
TAF UUWW 101050Z 1012/1112 28003G10MPS 9999 SCT030 TX25/1012Z TN15/1103Z
TEMPO 1012/1020 -TSRA BKN020CB
BECMG 1020/1021 FEW007 BKN016
TEMPO 1021/1106 -SHRA BKN020CB PROB40
TEMPO 1021/1106 -TSRA BKN020CB
BECMG 1101/1103 34006G13MPS
Leig dhuinn gu sònraichte aire a thoirt do na loidhnichean AM FEAR и BECMG. Tha TEMPO a’ ciallachadh gun atharraich an fhìor aimsir rè na h-ùine ainmichte bho àm gu àm. BECMG - bidh an aimsir ag atharrachadh mean air mhean taobh a-staigh ùine shònraichte.
Is e sin, an loidhne:
TEMPO 1012/1020 -TSRA BKN020CB
Bidh a’ ciallachadh:
- [1012 / 1020] - eadar 12 agus 20 uairean (Greenwich Mean Time);
- [-TSRA] - stoirm tàirneanaich (TS = stoirm tàirneanaich) le uisge (RA = uisge) de dhian ìosal (soidhne minus);
- [BKN020CB] - sgòthan cudromach (BKN = briste), cumulonimbus (CB = cumulonimbus) aig 2000 troigh (610 meatairean) os cionn ìre na mara.
Tha tòrr teirmean ann airson uinneanan sìde, agus tha e duilich cuimhneachadh orra. Tha an còd airson iarrtas TAF air a sgrìobhadh san aon dòigh.
Còd a luchdadh a-nuas gu neòil
Gus nach caill sinn ùine, bheir sinn teamplaid bot teileagram bhon stòr againn
Leis anns a 'chòd bidh sinn a' faighinn cothrom air a 'mhodal pytaf, an uairsin bu chòir an dreach aige a chuir ris sa bhad riatanasan.txt
pytaf~=1.2.1
- Gluaisidh sinn air adhart gu deasachadh bot/tele_bot.py. Bidh sinn a’ toirt air falbh a h-uile rud neo-riatanach agus a’ cur a’ chòd againn ris.
import os
from urllib import request
import telebot
import pytaf
TOKEN = os.environ.get('TOKEN')
URL_METAR = "https://tgftp.nws.noaa.gov/data/observations/metar/stations/UUWW.TXT"
URL_TAF = "https://tgftp.nws.noaa.gov/data/forecasts/taf/stations/UUWW.TXT"
bot = telebot.TeleBot(token=TOKEN, threaded=False)
keyboard = telebot.types.ReplyKeyboardMarkup(resize_keyboard=True)
keyboard.row('/start', '/get_metar', '/get_taf')
def start(message):
msg = "Привет. Это бот для получения авиационного прогноза погоды "
"с серверов NOAA. Бот настроен на аэропорт Внуково (UUWW)."
bot.send_message(message.chat.id, msg, reply_markup=keyboard)
def parse_data(code):
code = code.split('n')[1]
return pytaf.Decoder(pytaf.TAF(code)).decode_taf()
def get_metar(message):
# Fetch info from server.
code = request.urlopen(URL_METAR).read().decode('utf-8')
# Send formatted answer.
bot.send_message(message.chat.id, parse_data(code), reply_markup=keyboard)
def get_taf(message):
# Fetch info from server.
code = request.urlopen(URL_TAF).read().decode('utf-8')
# Send formatted answer.
bot.send_message(message.chat.id, parse_data(code), reply_markup=keyboard)
def route_command(command, message):
"""
Commands router.
"""
if command == '/start':
return start(message)
elif command == '/get_metar':
return get_metar(message)
elif command == '/get_taf':
return get_taf(message)
def main(**kwargs):
"""
Serverless environment entry point.
"""
print(f'Received: "{kwargs}"')
message = telebot.types.Update.de_json(kwargs)
message = message.message or message.edited_message
if message and message.text and message.text[0] == '/':
print(f'Echo on "{message.text}"')
route_command(message.text.lower(), message)
- Bidh sinn a’ pacadh an eòlaire gu lèir a-steach do thasglann ZIP agus a’ dol chun phannal smachd chun ghnìomh cruthaichte.
- Brùth Deasaich agus luchdaich sìos an tasglann leis a 'chòd.
- Lìon a-steach an t-slighe càirdeach san fhaidhle tele_bot (leudachadh .py dh’ fhaodadh nach eil e air a shònrachadh) agus gnìomh puing crìochnachaidh (san eisimpleir air a thoirt seachad tha seo prìomh).
- earrann Caochlaidhean Àrainneachd sgrìobh caochladair TOKEN agus sònraich dha comharra an teileagram bot a tha thu ag iarraidh.
- Brùth Sàbhail is Leudaich, às deidh sin thèid sinn chun na h-earrainn Triggers.
- Chuir sinn an suidse Iarrtas HTTPgus an t-iarrtas a dhèanamh poblach.
Tha URL againn a-nis airson an gnìomh a ghairm gu poblach. Chan eil air fhàgail ach
/setwebhook <you bot token> <public URL of your function>
thoradh air
Ma thèid a h-uile càil a dhèanamh ceart, tòisichidh am bot agad ag obair sa bhad agus seallaidh e an aithisg sìde itealain as ùire gu dìreach san teachdaire.
Gu dearbh, faodar an còd a leasachadh, ach eadhon anns an t-suidheachadh làithreach aige tha e gu leòr faighinn a-mach an aimsir agus an ro-aithris as cinntiche bho stòr earbsach.
Lorgaidh tu an dreach slàn den chòd nar
Source: www.habr.com