
Ka janë shumë shërbime që ofrojnë informacion mbi motin, por cilit duhet t'i besosh? Kur fillova të udhëtoj shpesh me biçikletë, doja që të kisha informacionin më të saktë mbi kushtet atmosferike në vendin ku udhëtoj.
Mendimi i parĂ« ishte tĂ« mbledh njĂ« stacion moti DIY me sensorĂ« dhe tĂ« merrja tĂ« dhĂ«nat prej tij. Por nuk desha tĂ« «shpik rrotĂ«n», kĂ«shtu qĂ« si burim tĂ« dhĂ«nash tĂ« verifikuara zgjodha informacionin pĂ«r motin qĂ« pĂ«rdoret nĂ« aviacionin civil, mĂ« konkretisht METAR (METeorological Aerodrome Report) dhe TAF (TAF â Terminal Aerodrome Forecast). NĂ« aviacion, moti ka ndikim mbi jetĂ«t e qindra njerĂ«zve, prandaj parashikimet janĂ« sa mĂ« tĂ« sakta.
Ky informacion transmetohet nĂ« mĂ«nyrĂ« 24-orĂ«she me zĂ« nĂ« çdo aeroport modern nĂ« formĂ«n e ATIS (Automatic Terminal Information Service) dhe VOLMET (nga fr. vol â fluturim dhe mĂ©tĂ©o â mot). ATIS ofron informacion mbi motin aktual nĂ« aeroport, ndĂ«rsa VOLMET jep parashikimin pĂ«r 24-30 orĂ«t e ardhshme, dhe jo vetĂ«m pĂ«r aeroportin qĂ« transmeton, por edhe pĂ«r tĂ« tjerĂ«.
Shembulli i funksionimit të ATIS në aeroportin Vnukovo:
Shembulli i funksionimit të VOLMET në aeroportin Vnukovo
Të mbash gjithmonë me vete një radiopërçues ose transmetues në gamën përkatëse është e papraktikueshme, dhe doja të krijoja një bot në Telegram, i cili me një klikim butoni do të siguronte të njëjtin parashikim. Të dedikosh një server për këtë është më shumë se sa e nevojshme, ashtu si dhe të dërgosh kërkesa në Raspberry-n tim në shtëpi.
Prandaj, si backend vendosa të përdor shërbimin Numri i kërkesave do të jetë shumë i vogël, kështu që ky shërbim do të jetë praktikisht falas (sipërmarrjet e mia tregojnë se do të kushtojë 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:

Pas rregullimit të projektit, kalojmë në seksionin Funksionet:

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

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

Para se tĂ« fillojmĂ« me krijimin e kodit nĂ« Python, do tĂ« duhet tĂ« krijojmĂ« njĂ« bot nĂ« Telegram. Nuk do tĂ« pĂ«rshkruaj se si bĂ«het kjo â ka njĂ« udhĂ«zues tĂ« detajuar . E rĂ«ndĂ«sishme pĂ«r ne Ă«shtĂ« â token e botit tĂ« krijuar.
Përgatitja e kodit
Si burim të dhënash të besueshme kam zgjedhur Administratën Kombëtare të Okeaneve dhe Atmosferës të SHBA-së (shkurt. National Oceanic and Atmospheric Administration, NOAA). Ky agjenci shkencor azhurnon të dhënat në serverin e saj në formatin TXT në kohë reale.
Lidhja për të marrë të dhënat METAR (kushtojini vëmendje regjistrit):
https://tgftp.nws.noaa.gov/data/observations/metar/stations/<kod aeroporti sipas ICAO>.TXTNë rastin tim, aeroporti më i afërt është Vnukovo, kodi i tij sipas ICAO është UUWW. Kalimi në URL-në e formuar do të japë këtë rezultat:
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 ta kuptojnë pa probleme se çfarë do të thotë ky rresht, megjithatë na nevojitet një shpjegim:
- [UUWW] â Vnukovo, qyteti i MoskĂ«s (Rusia â RU);
- [101130Z] â Dita e 10-tĂ« e muajit, ora 11:30 sipas Greenwich-it;
- [31004MPS] â drejtimi i erĂ«s 310 gradĂ«, shpejtĂ«sia 4 m/s;
- [9999] â dukshmĂ«ria horizontale 10 km e mĂ« shumĂ«;
- [SCT048] â re tĂ« shpĂ«rndara nĂ« lartĂ«sinĂ« 4800 kĂ«mbĂ« (~1584m);
- [24/13] â temperatura 24°C, pika e avullit 13°C;
- [Q1014] â presioni (QNH) 1014 hektopaskale (750 mm Hg);
- [R01/000070] â koeficienti i ngjitjes nĂ« pistĂ«n 01 â 0,70;
- [NOSIG] â pa ndryshime tĂ« rĂ«ndĂ«sishme.
Le t'i fillojmë shkrimet e kodit. Fillimisht do të na nevojiten funksionet e importuara ) me të dhënat. Ja një lidhje që mund ta vendosni thjesht në fushën e shfletuesit dhe pastaj të rikrijoni faqen (kjo duhet bërë vetëm një herë): dhe pytaf:
from urllib import request
import pytafCaktojmë variablat dhe përgatisim funksionin për dekodim:
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()Le të kalojmë te TAF (vetëm regjistri është i rëndësishëm).
https://tgftp.nws.noaa.gov/data/forecasts/taf/stations/<kod aeroporti sipas ICAO>.TXTSikurse në shembullin e mëparshëm, le 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
NĂ« veçanti le tĂ« kushtojmĂ« vĂ«mendje rreshtave TEMPO dhe BECMG. TEMPO do tĂ« thotĂ« se moti aktual nĂ« periudhĂ«n e caktuar do tĂ« ndryshojĂ« periodikisht. BECMG â moti do tĂ« ndryshojĂ« gradualisht nĂ« periudhĂ«n e caktuar.
Pra, rreshti:
TEMPO 1012/1020 -TSRA BKN020CBDo të thotë:
- [1012/1020] â nĂ« periudhĂ«n nga ora 12 deri nĂ« 20 (sipĂ«r Greenwich-it);
- [-TSRA] â stuhia (TS = thunderstorm) me shi (RA = rain) intensiteti i vogĂ«l (sheni minus);
- [BKN020CB] â re tĂ« konsiderueshme (BKN = broken), me shi me re tĂ« mbushura (CB = cumulonimbus) nĂ« lartĂ«sinĂ« 2000 kĂ«mbĂ« (610 metra) mbi nivelin e detit.
Ekzistojnë shumë terma që do të thonë fenomene të motit, dhe është e vështirë t'i memorizosh ato. Kodi për kërkesën TAF shkruhet në mënyrë të ngjashme.
Ngarkojmë kodin në cloud
Që të mos humbim kohën kot, le të marrim një model të bisedës Telegram nga depoja jonë . Atje ka një strukturë të përgatitur paraprakisht requirements.txt dhe setup.py me një strukturë të saktë dosjesh.
Duke qenë se në kod do të referohemi në modul pytaf, duhet të shtojmë versionin e tij menjëherë në requirements.txt
pytaf~=1.2.1- Kalo në redaktimin e bot/tele_bot.py. Hiq të gjitha të tepërta dhe shto 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ë një bot për marrjen e parashikimeve të motit për aviacionin "
"nga serverët e NOAA. Boti është i konfiguruar 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ërgjigje të formatizuar.
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ërgjigje të formatizuar.
bot.send_message(message.chat.id, parse_data(code), reply_markup=keyboard)
def route_command(command, message):
"""
Router për komandat.
"""
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):
"""
Pikë hyrje në ambientin pa server.
"""
print(f'Pranuar: "{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 në "{message.text}"')
route_command(message.text.lower(), message)
- Paketojmë të gjithë drejtorinë në një arkiv ZIP dhe kalojmë në panelin e kontrollit për funksionin e krijuar.
- Klikoni Redakto dhe ngarkojmë arkivin me kodin.

- Plotësojmë rrugën relative në skedarin tele_bot (shtesa .py nuk është e nevojshme ta përmendim) dhe funksionin e endpointit (në shembullin e dhënë është main).
- Në seksionin Variablat e ambientit shkruajmë variablën TOKEN dhe i japim atij tokenin e nevojshëm të botit të Telegramit.
- Klikoni Ruaj dhe publikoj, pas së cilës kalojmë në seksionin Triggerat.
- Vendosim ndërruesin HTTP-requests, për ta bërë kërkesën publike.

Kemi marrë një URL për thirrjen publike të funksionit. E vetmja gjë që mbetet është 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ë funksionojë dhe të japë një përmbledhje të saktë të motit aviator direkt në mesazher.

Natyrisht, kodi mund të përmirësohet, megjithatë edhe në këtë gjendje është mjaft për të marrë parashikimin më të saktë të motit nga një burim të verifikuar.
Versionin e plotë të kodit do ta gjeni në .
Burimi: habr.com
