Hemm ħafna servizzi li jipprovdu informazzjoni dwar it-temp, imma liema wieħed għandek tafda? Meta bdejt niċċirkola ta’ spiss, ridt li jkolli l-aktar informazzjoni preċiża dwar il-kundizzjonijiet tat-temp fil-post fejn nirkeb.
L-ewwel ħsieb tiegħi kien li nibni stazzjon tat-temp DIY żgħir b'sensors u nirċievi data minnu. Imma jien ma "ivvintajtx ir-rota" u għażilt informazzjoni dwar it-temp li tintuża fl-avjazzjoni ċivili bħala sors ta' dejta verifikata, jiġifieri METAR (Rapport dwar l-Ajrudrom METeoroloġiku) u TAF (TAF - Tbassir tal-Ajrudrom tat-Terminal). Fl-avjazzjoni, il-ħajja ta’ mijiet ta’ nies tiddependi mit-temp, u għalhekk it-tbassir huwa preċiż kemm jista’ jkun.
Din l-informazzjoni tixxandar XNUMX/XNUMX bil-vuċi f'kull ajruport modern fil-forma ATIS (Servizz ta' Informazzjoni tat-Terminal Awtomatiku) u VOLMET (mill-Franċiż. vol - titjira u Meteo - temp). L-ewwel jipprovdi informazzjoni dwar it-temp attwali fl-ajruport, u t-tieni jipprovdi tbassir għall-24-30 siegħa li ġejjin, mhux biss fil-mitjar tax-xandir, iżda wkoll f'oħrajn.
Eżempju ta' operazzjoni ATIS fl-ajruport ta' Vnukovo:
Eżempju ta' kif jaħdem VOLMET fl-Ajruport ta' Vnukovo
Huwa inkonvenjenti li ġġorr skaner tar-radju jew transceiver miegħek kull darba għall-firxa korrispondenti, u ridt noħloq bot f'Telegram li, mal-ikklikkja ta 'buttuna, jippermettilek tikseb l-istess tbassir. Mhuwiex prattiku għall-inqas li jiġi allokat server separat għal dan, kif ukoll li jintbagħtu talbiet lid-dar tiegħek Raspberry.
Għalhekk, iddeċidejt li nuża s-servizz bħala backend
Preparazzjoni backend
Oħloq funzjoni
Fil-pannell tal-kontroll
Wara li jinħoloq il-proġett, mur fit-taqsima Funzjonijiet:
Agħfas il-buttuna Oħloq funzjoni u agħtiha l-isem mixtieq:
Wara li tagħfas Oħloq funzjoni se jkollna rappreżentazzjoni tal-funzjoni maħluqa:
Qabel ma tibda toħloq kodiċi f'Python, ser ikollok bżonn toħloq bot f'Telegram. Mhux se niddeskrivi kif dan isir - hemm struzzjonijiet dettaljati
Tħejjija tal-kodiċi
Għażilt in-National Oceanic and Atmospheric Administration (NOAA) bħala sors ta’ dejta affidabbli. Din l-aġenzija xjentifika taġġorna d-dejta f'ħin reali fuq is-server tagħha fil-format TXT.
Link biex tikseb id-dejta METAR (innota l-każ):
https://tgftp.nws.noaa.gov/data/observations/metar/stations/<код аэропорта по ICAO>.TXT
Fil-każ tiegħi, l-eqreb ajruport huwa Vnukovo, il-kodiċi ICAO tiegħu huwa UUWW. Jekk tmur fil-URL iġġenerat tagħti dan li ġej:
2020/08/10 11:30
UUWW 101130Z 31004MPS 9999 SCT048 24/13 Q1014 R01/000070 NOSIG
L-ewwel linja hija l-ħin attwali tat-tbassir f'Greenwich Mean Time. It-tieni linja hija sommarju tat-temp attwali. Il-bdoti tal-avjazzjoni ċivili se jkollhom l-ebda problema biex jifhmu xi tfisser din il-linja, iżda għandna bżonn spjegazzjoni:
- [UUWW] — Vnukovo, Moska (Russja — RU);
- [101130Z] — L-10 jum tax-xahar, 11:30 am GMT;
- [31004MPS] — direzzjoni tar-riħ 310 grad, veloċità 4 m/s;
- [9999] — viżibilità orizzontali 10 km jew aktar;
- [SCT048] — sħab imferrex/imxerred f'4800 pied (~1584 m);
- [24 / 13] — temperatura 24°C, punt tan-nida 13°C;
- [Q1014] — pressjoni (QNH) 1014 ettopascals (750 mm Hg);
- [R01/000070] — koeffiċjent ta' adeżjoni fuq korsija 01 — 0,70;
- [NOSIG] - mingħajr bidliet sinifikanti.
Ejja nibdew niktbu l-kodiċi tal-programm. L-ewwel għandek bżonn timporta funzjonijiet jitlob и pytaf:
from urllib import request
import pytaf
Speċifika l-varjabbli u pprepara l-funzjoni tad-dekodifikazzjoni:
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()
Ejja ngħaddu għal TAF (il-każ huwa importanti wkoll).
https://tgftp.nws.noaa.gov/data/forecasts/taf/stations/<код аэропорта по ICAO>.TXT
Bħal fl-eżempju preċedenti, ejja nħarsu lejn it-tbassir fl-ajruport ta '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
Ejjew nagħtu attenzjoni speċjalment għal-linji TEMPO и BECMG. TEMPO tfisser li t-temp attwali matul il-perjodu speċifikat se jinbidel perjodikament. BECMG - it-temp se jinbidel gradwalment matul il-perjodu ta 'żmien speċifikat.
Jiġifieri, il-linja:
TEMPO 1012/1020 -TSRA BKN020CB
Se jfisser:
- [1012 / 1020] — bejn 12 u 20 siegħa (Ħin medju ta' Greenwich);
- [-TSRA] — maltempata bir-ragħad (TS = maltempata bir-ragħad) b’xita (RA = xita) ta’ intensità baxxa (sinjal minus);
- [BKN020CB] - sħab sinifikanti (BKN = miksur), cumulonimbus (CB = cumulonimbus) f'2000 pied (610 metru) 'l fuq mil-livell tal-baħar.
Hemm ħafna termini għall-fenomeni tat-temp, u huwa diffiċli li tiftakarhom. Il-kodiċi għat-talba TAF huwa miktub b'mod simili.
Tlugħ tal-kodiċi fil-cloud
Sabiex ma taħlix il-ħin, ejja nieħdu mudell tal-bot tat-telegramma mir-repożitorju tagħna
Peress li fil-kodiċi se nkunu qed naċċessaw il-modulu pytaf, allura l-verżjoni tagħha għandha tiġi miżjuda immedjatament rekwiżiti.txt
pytaf~=1.2.1
- Ejja ngħaddu għall-editjar bot/tele_bot.py. Aħna neħħi l-affarijiet kollha mhux meħtieġa u żid il-kodiċi tagħna.
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)
- Aħna nippakkjaw id-direttorju kollu f'arkivju ZIP u mmorru fil-pannell tal-kontroll għall-funzjoni maħluqa.
- Imbotta Editja u niżżel l-arkivju bil-kodiċi.
- Imla l-mogħdija relattiva fil-fajl tele_bot (estensjoni .py jistgħu ma jiġux speċifikati) u funzjoni endpoint (fl-eżempju mogħti dan huwa prinċipali).
- Fit-taqsima Varjabbli Ambjentali ikteb varjabbli TOKEN u jassenjah it-token tal-bot tat-telegramma mixtieqa.
- Imbotta Issejvja u Tespandi, wara li mmorru għat-taqsima iqanqal.
- Poġġi l-iswiċċ Talba HTTPbiex tagħmel it-talba pubblika.
Issa għandna URL biex insejħu pubblikament il-funzjoni. Kulma fadal hu
/setwebhook <you bot token> <public URL of your function>
Riżultat
Jekk kollox isir b'mod korrett, il-bot tiegħek immedjatament jibda jaħdem u juri l-aħħar rapport tat-temp tal-avjazzjoni direttament fil-messaġġier.
Naturalment, il-kodiċi jista 'jitjieb, iżda anke fl-istat attwali tiegħu huwa biżżejjed li ssir taf l-aktar temp preċiż u tbassir minn sors ta' fiduċja.
Issib il-verżjoni sħiħa tal-kodiċi f'tagħna
Sors: www.habr.com