
Ka shumë shërbime që ofrojnë informacion mbi motin, por si të besojmë njërit prej tyre? Kur fillova të udhëtoj shpesh me biçikletë, dëshiroja të kisha informacionin më të saktë mbi kushtet e motit në vendin ku po vozisja.
Mendimi i parë ishte të krijoja një stacion moti DIY me sensore dhe të merrja të dhënat prej tij. Por nuk doja të "risjellja rrotën" dhe zgjodha si burim të dhënash të verifikuara informacionin meteorologjik që përdoret në aviacionin civil, konkretisht METAR (Raporti Meteorologjik i Aerodromit) dhe TAF (Parashikimi i Aerodromit TAF). Në aviacion, jeta e qindra njerëzve varet nga moti, prandaj parashikimet janë sa më të sakta.
Ky informacion transmetohet në mënyrë të vazhdueshme me zë në çdo aerodrom modern nën formën e ATIS (Shërbimi Automatik i Informacionit të Terminalit) dhe VOLMET (nga frëngjishtja vol - fluturim dhe météo - mot). I pari ofron informacion mbi motin aktual në aerodrom, ndërsa i dyti - parashikimin për 24-30 orët e ardhshme, dhe jo vetëm për aerodromin e transmetimit, por edhe për të tjerët.
Shembulli i funksionit ATIS në aeroportin Vnukovo:
Shembulli i funksionit VOLMET në aeroportin Vnukovo
Ădo herĂ« qĂ« tĂ« marrĂ«sh me vete njĂ« skanues radio ose njĂ« transiver nĂ« bandĂ«n e duhur Ă«shtĂ« e papĂ«rshtatshme, dhe dĂ«shiroja tĂ« krijoja njĂ« robot nĂ« Telegram, i cili me njĂ« klikim mund tĂ« ofronte tĂ« njĂ«jtin parashikim. TĂ« ndash njĂ« server tĂ« veçantĂ« pĂ«r kĂ«tĂ« Ă«shtĂ« minimalisht e paarsyeshme, ashtu si tĂ« dĂ«rgosh kĂ«rkesa nĂ« Raspberry-n time shtĂ«piake.
Prandaj, si backend vendosa të përdor shërbimin . Numri i kërkesave do të jetë jashtëzakonisht i vogël, prandaj ky shërbim do të kushtojë praktikisht falas (sipas llogaritjeve të mia, do të dalë 22 rubla për 100,000 kërkesa).
Përgatitja e backend-it
Krijimi i funksionit
Në panelin e menaxhimit hapim pamjen Platforma Cloud dhe krijojmë një projekt të ri:

Pasi projekti të jetë krijuar, kalojmë në seksionin Funksionet:

Klikojmë butonin Krijo funksion dhe i japim emrin e nevojshëm:

Pas klikimit Krijo funksion ne do të kemi pamjen e funksionit të krijuar:

Para se të fillojmë të krijojmë kodin në Python, do të nevojitet të krijojmë një robot në Telegram. Nuk do të shpjegoj se si bëhet kjo - ujë është një udhëzim i detajuar në . E rëndësishme për ne është - token i robotit të krijuar.
Përgatitja e kodit
Si burim të dhënash të besueshëm kam zgjedhur Administratën Kombëtare të Oqeaneve dhe Atmosferës të SHBA-së (angl. National Oceanic and Atmospheric Administration, NOAA). Ky agjenci shkencor përditëson të dhënat në kohë reale në serverin e tij në formatin TXT.
Linku për marrjen e të dhënave METAR (vini re regjistrin):
https://tgftp.nws.noaa.gov/data/observations/metar/stations/.TXTNë rastin tim, aeroporti më i afërt është Vnukovo, kodi i tij sipas ICAO është UUWW. Shkarkimi në URL-në e formuar do të japë këtë:
2020/08/10 11:30
UUWW 101130Z 31004MPS 9999 SCT048 24/13 Q1014 R01/000070 NOSIG
Rreshti i parë është koha e vlefshmërisë së parashikimit sipas Greenwich-it. Rreshti i dytë është përmbledhja e motit aktual. Pilotët e aviacionit civil do të kuptojnë lehtësisht se çfarë nënkupton ky rresht, por ne na nevojitet një çelës:
- [UUWW] â Vnukovo, qyteti MoskĂ« (Rusia â RU);
- [101130Z] â dita e 10-tĂ« e muajit, 11 orĂ« dhe 30 minuta sipas Greenwich-it;
- [31004MPS] â drejtimi i erĂ«s 310 gradĂ«, shpejtĂ«sia 4 m/s;
- [9999] â dukshmĂ«ria horizontale 10 km dhe mĂ« shumĂ«;
- [SCT048] â re tĂ« shpĂ«rndara/nĂ« grumbuj nĂ« lartĂ«sinĂ« 4800 kĂ«mbĂ« (~1584m);
- [24/13] â temperatura 24°C, pika e ujit 13°C;
- [Q1014] â presioni (QNH) 1014 hektopaskalĂ« (750 mmHg);
- [R01/000070] â koeficienti i ngjitshmĂ«risĂ« nĂ« pistĂ«n 01 â 0.70;
- [NOSIG] â pa ndryshime tĂ« rĂ«ndĂ«sishme.
Të fillojmë me shkruar kodin programor. Për fillim, do të nevojitet të importoni funksionet ) me të dhëna. Ja linja që mund ta kopjoni thjesht në fushën e adresës së shfletuesit, dhe pastaj të rifreskoni faqen (kjo duhet bërë vetëm një herë): dhe pytaf:
from urllib import request
import pytafTë përcaktojmë variablat dhe të përgatitim funksionin e dekodimit:
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()Të kalojmë në TAF (regjistri gjithashtu është i rëndësishëm).
https://tgftp.nws.noaa.gov/data/forecasts/taf/stations/.TXTSi në shembullin e mëparshëm, të shohim parashikimin në aeroportin 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
VeçanĂ«risht, do tĂ« shqyrtojmĂ« rreshtat TEMPO dhe BECMG. TEMPO do tĂ« thotĂ« se moti aktual do tĂ« ndryshojĂ« periudhĂ«risht gjatĂ« periudhĂ«s sĂ« caktuar. BECMG â moti do tĂ« ndryshojĂ« gradualisht gjatĂ« periudhĂ«s sĂ« caktuar.
Pra, rreshti:
TEMPO 1012/1020 -TSRA BKN020CBDo të nënkuptojë:
- [1012/1020] â nĂ« intervalin nga ora 12 deri nĂ« 20 (sipAS Greenwich-it);
- [-TSRA] â stuhia (TS = thunderstorm) me shi (RA = rain) tĂ« intensitetit tĂ« vogĂ«l (shenja e minusit);
- [BKN020CB] â lloji i dukshĂ«m (BKN = i prishur), re tĂ« shiut (CB = kumulonimbus) nĂ« lartĂ«si prej 2000 kĂ«mbĂ«sh (610 metra) mbi nivelin e detit.
Ka mjaft terma që i referohen fenomeneve atmosferike, dhe mbamendja e tyre është e vështirë. Kodi për kërkesën TAF shkruhet në mënyrë të ngjashme.
Ngarkojmë kodin në cloud
Për të mos humbur kohë, do të marrim një shabllon të telegram-botit nga repoja jonë . Aty ka një përgatitje paraprake requirements.txt dhe setup.py me strukturë të saktë direktorish.
Tani pasi në kod do të lidhemi me modulin pytaf, versionin e tij duhet ta shtojmë menjëherë në requirements.txt
pytaf~=1.2.1- Të kalojmë në redaktimin bot/tele_bot.py. Heqim të gjitha gjërat e tepërta dhe shtojmë kodin tonë.
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 = "Përshëndetje. Ky është bot për marrjen e parashikimeve meteorologjike për aviacionin "
"nga serverët NOAA. Boti është konfigururuar për aeroportin Vnukovo (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):
# Merrni informacion nga serveri.
code = request.urlopen(URL_METAR).read().decode('utf-8')
# Dërgo përgjigjen e formatuar.
bot.send_message(message.chat.id, parse_data(code), reply_markup=keyboard)
def get_taf(message):
# Merrni informacion nga serveri.
code = request.urlopen(URL_TAF).read().decode('utf-8')
# Dërgo përgjigjen e formatuar.
bot.send_message(message.chat.id, parse_data(code), reply_markup=keyboard)
def route_command(command, message):
"""
Router i komandave.
"""
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):
"""
Pika e hyrjes për ambientin pa server.
"""
print(f'Marrë: "{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'Eko mbi "{message.text}"')
route_command(message.text.lower(), message)
- Paketa e gjithë direktorisë në një arkiv ZIP dhe kalojmë në panelin e menaxhimit për funksionin e krijuar.
- Klikoni Redakto dhe ngarko arkivin me kodin.

- Plotësojmë rrugën relative në skedarin tele_bot (shtesën .py mund ta lëmë pa e treguar) dhe funksionin e endpoint-it (në këtë rast main).
- Në seksionin Variablat e ambientit shkruajmë një variabël TOKEN dhe i japim asaj tokenin e nevojshëm të telegram-botit.
- Klikoni Ruaj dhe zhvillo, pastaj kalojmë në seksionin Triggerat.
- Vendosim kalimin HTTP-request, për ta bërë kërkesën publike.

Tani tani kemi URL për thirrjen publike të funksionit. Mbetet vetëm . Gjeni botin tonë në Telegram dhe regjistroni botin tuaj me komandën:
/setwebhook <you bot token> <public URL of your function>Rezultati
Nëse gjithçka është bërë siç duhet, boti juaj do të fillojë menjëherë të punojë dhe të tregojë përmbledhjen e tanishme të motit të aviacionit drejtpërdrejt në mesazher.

Sigurisht, kodi mund të përmirësohet, por edhe në gjendjen e tanishme është mjaft për të marrë informacione të sakta për motin dhe parashikimin nga një burim të verifikuar.
Versionin e plotë të kodit e gjeni në .
Burimi: habr.com
