ʻO ka wānana manawa kūpono loa: he bot no Telegram ma nā hana ao

ʻO ka wānana manawa kūpono loa: he bot no Telegram ma nā hana ao
Nui nā lawelawe e hāʻawi ana i ka ʻike o ka wā, akā ʻo wai kahi āu e hilinaʻi ai? I koʻu hoʻomaka ʻana i ke kaʻa kaʻa pinepine, makemake au e loaʻa ka ʻike pololei loa e pili ana i ke ʻano o ke aniau ma kahi aʻu e holo ai.

ʻO koʻu manaʻo mua, ʻo ia ke kūkulu ʻana i kahi kikowaena DIY liʻiliʻi me nā mea ʻike a loaʻa ka ʻikepili mai ia mea. Akā ʻaʻole wau i "hou i ka huila" a koho i ka ʻike o ka wā i hoʻohana ʻia i ka mokulele kīwila i kumu o ka ʻikepili i hōʻoia ʻia, ʻo ia hoʻi. METAR (METeorological Aerodrome Report) a TAF (TAF - Hōʻike Manaʻo Aerodrome Terminal). Ma ka mokulele, hilinaʻi ke ola o nā haneli o ka poʻe i ka lewa, no laila ua pololei nā wānana.

Hoʻolaha ʻia kēia ʻike XNUMX/XNUMX ma ka leo ma kēlā me kēia kahua mokulele o kēia manawa ma ke ʻano ATIS (Automatic Terminal Information Service) a VOLMET (mai Palani. vol - lele a météo - ka makani). Hāʻawi ka mea mua i ka ʻike e pili ana i ke aniau maoli ma ke kahua mokulele, a ʻo ka lua e hāʻawi i kahi wānana no nā hola 24-30 e hiki mai ana, ʻaʻole wale ma ke kahua mokulele hoʻolaha, akā ma nā mea ʻē aʻe.

Ka laʻana o ka hana ATIS ma Vnukovo airport:

He laʻana o ka hana ʻana o VOLMET ma Vnukovo Airport

He mea maʻalahi ka lawe ʻana i kahi scanner radio a i ʻole transceiver me ʻoe i kēlā me kēia manawa no ka laulā kūpono, a makemake wau e hana i kahi bot ma Telegram e hiki ai iā ʻoe ke loaʻa ka wānana like. ʻAʻole hiki ke hoʻokaʻawale i kahi kikowaena kaʻawale no kēia, a me ka hoʻouna ʻana i nā noi i kou home Raspberry.

No laila, ua hoʻoholo wau e hoʻohana i ka lawelawe ma ke ʻano he backend E koho i nā hiʻohiʻona ao. E liʻiliʻi ka helu o nā noi, no laila e manuahi ka lawelawe ʻana (e like me kaʻu helu ʻana, he 22 rubles no 100 mau noi).

Hoʻomākaukau hope

Hana i kahi hana

I ka papa mana my.selectel.ru wehe i ka nana paepae ao a hana i kahi papahana hou:

ʻO ka wānana manawa kūpono loa: he bot no Telegram ma nā hana ao
Ma hope o ka hana ʻana o ka papahana, e hele i ka ʻāpana Nā hana:

ʻO ka wānana manawa kūpono loa: he bot no Telegram ma nā hana ao
Pahu i ka pihi Hana i kahi hana a hāʻawi i ka inoa i makemake ʻia:

ʻO ka wānana manawa kūpono loa: he bot no Telegram ma nā hana ao
Ma hope o ke kaomi ʻana Hana i kahi hana e loaʻa iā mākou kahi hōʻike o ka hana i hana ʻia:

ʻO ka wānana manawa kūpono loa: he bot no Telegram ma nā hana ao
Ma mua o kou hoʻomaka ʻana e hana i ka code ma Python, pono ʻoe e hana i kahi bot ma Telegram. ʻAʻole wau e wehewehe pehea e hana ʻia ai - aia nā ʻōlelo kikoʻī ma ko makou kahua ike. ʻO ka mea nui iā mākou ka hōʻailona o ka bot i hana ʻia.

Hoʻomākaukau i ke code

Ua koho au i ka National Oceanic and Atmospheric Administration (NOAA) ma ke ʻano he kumu o ka ʻikepili hilinaʻi. Hoʻopuka kēia ʻoihana ʻepekema i ka ʻikepili i ka manawa maoli ma kāna kikowaena ma TXT format.

Link e kiʻi i ka ʻikepili METAR (e nānā i ka hihia):

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

I koʻu hihia, ʻo Vnukovo ka mokulele kokoke loa, ʻo kāna code ICAO UUWW. Ke hele nei i ka URL i hana ʻia e hāʻawi i kēia:

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

ʻO ka laina mua ka manawa o ka wānana ma Greenwich Mean Time. ʻO ka laina ʻelua he hōʻuluʻulu o ke aniau maoli. ʻAʻole pilikia ka poʻe hoʻokele mokulele civil i ka hoʻomaopopo ʻana i ke ʻano o kēia laina, akā pono mākou i wehewehe:

  • [UUWW] - Vnukovo, Moscow (Russia - RU);
  • [101130Z] — La 10 o ka malama, 11:30 am GMT;
  • [31004MPS] — kuhikuhi makani 310 degere, māmā holo 4 m/s;
  • [9999] — ʻike ākea 10 km a ʻoi aku paha;
  • [SCT048] — nā ao hoʻopuehu/puehu ma 4800 kapuaʻi (~1584m);
  • [24/13] — ka mahana 24°C, ka hau 13°C;
  • [Q1014] - kaomi (QNH) 1014 hectopascals (750 mm Hg);
  • [R01/000070] - coefficient o ka pili ana ma ke ala 01 - 0,70;
  • [NOSIG] - me nā loli nui ʻole.

E hoʻomaka kākou e kākau i ka code program. Pono mua ʻoe e hoʻokomo i nā hana noi и pytaf:

from urllib import request
import pytaf

E wehewehe i nā mea hoʻololi a hoʻomākaukau i ka hana decoding:

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

E neʻe kākou i ka TAF (he mea nui hoʻi ka hihia).

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

E like me ka laʻana mua, e nānā kākou i ka wānana ma ke kahua mokulele ʻo 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

E nānā pono kākou i nā laina TEMPO и BECMG. 'O TEMPO 'o ia ho'i, e ho'ololi ke aniau maoli i ka manawa i kuhikuhi 'ia. BECMG - e loli mālie ke aniau i loko o kahi manawa i kuhikuhi ʻia.

ʻO ia ka laina:

TEMPO 1012/1020 -TSRA BKN020CB

ʻO ke ʻano:

  • [1012/1020] — ma waena o 12 a me 20 hola (Greenwich Mean Time);
  • [-TSRA] - ka hekili (TS = thunderstorm) me ka ua (RA = ka ua) o ka ikaika haʻahaʻa (hōʻailona hōʻemi);
  • [BKN020CB] - nui (BKN = haki), cumulonimbus (CB = cumulonimbus) ao ma 2000 kapuaʻi (610 mika) ma luna o ka ʻilikai.

Nui nā huaʻōlelo no nā ʻano ʻano o ka wā, a paʻakikī ka hoʻomanaʻo ʻana iā lākou. Ua kākau ʻia ke code no ka noi TAF ma ke ʻano like.

Ke hoʻouka nei i ke code i ke ao

I mea e pau ʻole ai ka manawa, e lawe kāua i kahi hoʻohālike bot telegram mai kā mākou waihona kapua-telegram-bot. Aia kahi i hoʻomākaukau mua ʻia koi.txt и setup.py me ka papa kuhikuhi pololei.

No ka mea ma ke code e komo mākou i ka module pytaf, a laila e hoʻohui koke ʻia kona mana i koi.txt

pytaf~=1.2.1

  • E neʻe kākou i ka hoʻoponopono bot/tele_bot.py. Wehe mākou i nā mea pono ʻole a hoʻohui i kā mākou code.

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)

  • Hoʻopili mākou i ka papa kuhikuhi holoʻokoʻa i kahi waihona ZIP a hele i ka papa mana i ka hana i hana ʻia.
  • Kui ʻū Hoʻoponopono a hoʻoiho i ka waihona me ke code.

ʻO ka wānana manawa kūpono loa: he bot no Telegram ma nā hana ao

  • E hoʻopiha i ke ala pili i ka faila tele_bot (hoʻonui .py ʻAʻole hiki ke kuhikuhi ʻia) a me kahi hana hope (ma ka laʻana i hāʻawi ʻia ʻo ia ka papa kuhikuhiE).
  • pauku Nā Hoʻololi Kaiapuni e kakau i ka hoololi TOKENA a hāʻawi iā ia i ka hōʻailona o ka bot telegram i makemake ʻia.
  • Kui ʻū Mālama a hoʻonui, a laila hele mākou i ka ʻāpana nā mea hoʻoulu.
  • Hoʻokomo mākou i ka hoʻololi noi HTTPe hoolaha i ke noi.

ʻO ka wānana manawa kūpono loa: he bot no Telegram ma nā hana ao
Loaʻa iā mākou kahi URL no ke kāhea ʻana i ka hana. ʻO nā mea i koe hoʻonohonoho i ka webhook. E ʻimi i kā mākou bot @SelectelServerless_bot ma Telegram a hoʻopaʻa inoa i kāu bot me ke kauoha:

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

hopena

Inā hana pololei nā mea a pau, e hoʻomaka koke kāu bot e hana a hōʻike pololei i ka hōʻike ʻana i ka ʻelele mokulele hou loa.

ʻO ka wānana manawa kūpono loa: he bot no Telegram ma nā hana ao
ʻOiaʻiʻo, hiki ke hoʻomaikaʻi ʻia ke code, akā ʻoiai i kona kūlana i kēia manawa ua lawa ia e ʻike i ka ʻike kūpono loa a me ka wānana mai kahi kumu hilinaʻi.

E ʻike ʻoe i ka mana piha o ke code ma kā mākou nā waihona ma GitHub.

ʻO ka wānana manawa kūpono loa: he bot no Telegram ma nā hana ao

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka