Isibikezelo sezulu esinembe kakhulu: i-bot yeTelegram emisebenzini yamafu

Isibikezelo sezulu esinembe kakhulu: i-bot yeTelegram emisebenzini yamafu
Ziningi izinsiza ezihlinzeka ngolwazi lwesimo sezulu, kodwa iyiphi okufanele uyithembe? Ngenkathi ngiqala ukuhamba ngebhayisikili njalo, ngangifuna ukuba nolwazi olunembe kakhulu mayelana nezimo zezulu endaweni engigibela kuyo.

Umcabango wami wokuqala kwakuwukwakha isiteshi sesimo sezulu se-DIY esincane esinezinzwa futhi ngithole idatha kuso. Kepha angizange “ngiqale kabusha isondo” futhi ngakhetha imininingwane yesimo sezulu esetshenziswa ezindizeni zomphakathi njengomthombo wedatha eqinisekisiwe, okungukuthi IMETARI (METeorological Aerodrome Report) kanye TAF (TAF - Terminal Aerodrome Forecast). Ezindizeni, ukuphila kwamakhulu abantu kuncike esimweni sezulu, ngakho izibikezelo zinembe ngangokunokwenzeka.

Lolu lwazi lusakazwa XNUMX/XNUMX ngezwi kuzo zonke izinkundla zezindiza zesimanje ngendlela I-ATIS (Isevisi ye-Automatic Terminal Information) kanye I-VOLMET (kusuka ku-French. i-vol - indiza kanye Meteo - sezulu). Eyokuqala inikeza ulwazi mayelana nesimo sezulu sangempela enkundleni yezindiza, kanti eyesibili inikeza isibikezelo samahora angu-24-30 alandelayo, hhayi kuphela enkundleni yezindiza yokusakaza, kodwa nakwabanye.

Isibonelo sokusebenza kwe-ATIS esikhumulweni sezindiza saseVnukovo:

Isibonelo sendlela i-VOLMET esebenza ngayo esikhumulweni sezindiza saseVnukovo

Akulungile ukuthwala isithwebuli somsakazo noma i-transceiver ngaso sonke isikhathi ngebanga elihambisanayo, futhi bengifuna ukwakha i-bot kuTelegram okuthi, ngokuchofoza inkinobho, ikuvumele ukuthi uthole isibikezelo esifanayo. Okungenani akwenzeki ukwaba iseva ehlukile yalokhu, kanye nokuthumela izicelo kuRaspberry wasekhaya.

Ngakho-ke, nginqume ukusebenzisa isevisi njenge-backend Izici ze-Selectel Cloud. Inombolo yezicelo izoba yinto encane, ngakho-ke insizakalo enjalo izoba mahhala (ngokusho kwezibalo zami, izoba ama-ruble angu-22 ngezicelo ezingu-100).

Ukulungiswa kwe-backend

Dala umsebenzi

Kuphaneli yokulawula my.selectel.ru vula umbono Inkundla yamafu bese udala iphrojekthi entsha:

Isibikezelo sezulu esinembe kakhulu: i-bot yeTelegram emisebenzini yamafu
Ngemuva kokuthi iphrojekthi idaliwe, hamba esigabeni Imisebenzi:

Isibikezelo sezulu esinembe kakhulu: i-bot yeTelegram emisebenzini yamafu
Cindezela inkinobho Dala umsebenzi futhi uyinikeze igama olifunayo:

Isibikezelo sezulu esinembe kakhulu: i-bot yeTelegram emisebenzini yamafu
Ngemva kokucindezela Dala umsebenzi sizoba nokumelelwa komsebenzi odaliwe:

Isibikezelo sezulu esinembe kakhulu: i-bot yeTelegram emisebenzini yamafu
Ngaphambi kokuthi uqale ukudala ikhodi ku-Python, uzodinga ukudala i-bot kuTelegram. Ngeke ngichaze ukuthi lokhu kwenziwa kanjani - kunemiyalo enemininingwane esisekelweni sethu solwazi. Into eyinhloko kithi ithokheni ye-bot edaliwe.

Ilungiselela ikhodi

Ngikhethe i-National Oceanic and Atmospheric Administration (NOAA) njengomthombo wedatha ethembekile. Le nhlangano yesayensi ibuyekeza idatha ngesikhathi sangempela kuseva yayo ngefomethi ye-TXT.

Xhuma ukuze uthole idatha ye-METAR (qaphela isimo):

https://tgftp.nws.noaa.gov/data/observations/metar/stations/<код аэропорта по ICAO>.TXT

Endabeni yami, isikhumulo sezindiza esiseduze yiVnukovo, ikhodi yaso ye-ICAO ithi UUWW. Ukuya ku-URL ekhiqiziwe kuzonikeza okulandelayo:

2020/08/10 11:30
UUWW 101130Z 31004MPS 9999 SCT048 24/13 Q1014 R01/000070 NOSIG

Umugqa wokuqala yisikhathi samanje sesibikezelo se-Greenwich Mean Time. Umugqa wesibili uyisifinyezo sesimo sezulu sangempela. Abashayeli bezindiza bezindiza ngeke babe nenkinga yokuqonda ukuthi lo mzila usho ukuthini, kodwa sidinga incazelo:

  • [UUWW] - Vnukovo, eMoscow (Russia - RU);
  • [101130Z] — Usuku lwe-10 lwenyanga, 11:30 am GMT;
  • [31004MPS] - isiqondiso somoya 310 degrees, isivinini 4 m / s;
  • [9999] - ukubonakala okuvundlile 10 km noma ngaphezulu;
  • [SCT048] - amafu ahlakazekile/ahlakazekile ngamamitha angama-4800 (~ 1584m);
  • [24 / 13] - izinga lokushisa 24°C, amazolo iphuzu 13°C;
  • [Q1014] - ingcindezi (QNH) 1014 hectopascals (750 mm Hg);
  • [R01/000070] - i-coefficient yokunamathela kumzila we-01 - 0,70;
  • [NOSIG] - ngaphandle kwezinguquko ezibalulekile.

Masiqale ukubhala ikhodi yohlelo. Okokuqala udinga ukungenisa imisebenzi isicelo и i-pytaf:

from urllib import request
import pytaf

Cacisa okuguquguqukayo futhi ulungiselele umsebenzi wokukhipha amakhodi:

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()

Asidlulele ku-TAF (icala nalo libalulekile).

https://tgftp.nws.noaa.gov/data/forecasts/taf/stations/<код аэропорта по ICAO>.TXT

Njengasesibonelweni esandulele, ake sibheke isibikezelo sezindiza saseVnukovo:

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

Ake sinake ikakhulukazi imigqa I-TEMPO и I-BECMG. I-TEMPO isho ukuthi isimo sezulu sangempela phakathi nesikhathi esishiwo sizoshintsha ngezikhathi ezithile. I-BECMG - isimo sezulu sizoshintsha kancane kancane phakathi nenkathi ethile yesikhathi.

Okusho ukuthi, umugqa:

TEMPO 1012/1020 -TSRA BKN020CB

Kuzosho ukuthi:

  • [1012 / 1020] - phakathi kwamahora ayi-12 nangama-20 (i-Greenwich Mean Time);
  • [-TSRA] - ukuduma kwezulu (TS = ukuduma kwezulu) nemvula (RA = imvula) enamandla aphansi (uphawu lokususa);
  • [BKN020CB] - abalulekile (BKN = aphukile), i-cumulonimbus (CB = cumulonimbus) amafu angamafidi angu-2000 (amamitha angu-610) ngaphezu kwezinga lolwandle.

Maningi kakhulu amagama ezimo zezulu, futhi kunzima ukuwakhumbula. Ikhodi yesicelo se-TAF ibhalwe ngendlela efanayo.

Ilayisha ikhodi efwini

Ukuze singachithi isikhathi, ake sithathe ithempulethi ye-telegram bot endaweni yethu yokugcina ifu-telegram-bot. Kukhona okulungiselelwe ngaphambilini izidingo.txt и setup.py ngesakhiwo senkomba esilungile.

Njengoba kukhodi sizobe sifinyelela imojula i-pytaf, khona-ke inguqulo yayo kufanele yengezwe ngokushesha kuyo izidingo.txt

pytaf~=1.2.1

  • Asiqhubekele ekuhleleni bot/tele_bot.py. Sisusa zonke izinto ezingadingekile futhi sengeza ikhodi yethu.

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)

  • Sipakisha lonke uhla lwemibhalo endaweni yomlando ye-ZIP bese siya kuphaneli yokulawula emsebenzini owenziwe.
  • Phusha Hlela bese ulanda ingobo yomlando ngekhodi.

Isibikezelo sezulu esinembe kakhulu: i-bot yeTelegram emisebenzini yamafu

  • Gcwalisa indlela ehlobene efayeleni tele_bot (isandiso .py ingase ingacaciswa) kanye nomsebenzi wephoyinti lokugcina (esibonelweni esinikezwe lokhu ngu main).
  • Esigabeni Imvelo Eguquguqukayo bhala okuguquguqukayo KUSUKILE futhi inikeze ithokheni ye-telegram bot oyifunayo.
  • Phusha Londoloza futhi Wandise, ngemva kwalokho siya esigabeni izicupha.
  • Sifaka inkinobho Isicelo se-HTTPukwenza isicelo sibe esidlangalaleni.

Isibikezelo sezulu esinembe kakhulu: i-bot yeTelegram emisebenzini yamafu
Manje sesine-URL yokubiza umsebenzi esidlangalaleni. Okusele nje lungisa i-webhook. Thola i-bot yethu @SelectelServerless_bot kuTelegram bese ubhalisa i-bot yakho ngomyalo:

/setwebhook <you bot token> <public URL of your function>

Umphumela

Uma konke kwenziwa kahle, i-bot yakho izoqala ukusebenza ngokushesha futhi ibonise umbiko wakamuva wesimo sezulu sendiza ngqo kusithunywa.

Isibikezelo sezulu esinembe kakhulu: i-bot yeTelegram emisebenzini yamafu
Yiqiniso, ikhodi ingathuthukiswa, kodwa ngisho nasesimweni sayo samanje kwanele ukuthola isimo sezulu esinembile kakhulu nesibikezelo esivela emthonjeni othembekile.

Uzothola inguqulo ephelele yekhodi yethu amakhosombe ku-GitHub.

Isibikezelo sezulu esinembe kakhulu: i-bot yeTelegram emisebenzini yamafu

Source: www.habr.com

Engeza amazwana