Ang labing tukma nga forecast sa panahon: bot alang sa Telegram sa mga function sa panganod

Ang labing tukma nga forecast sa panahon: bot alang sa Telegram sa mga function sa panganod
Adunay daghang mga serbisyo nga naghatag impormasyon sa panahon, apan hain ang imong saligan? Sa diha nga nagsugod ako sa pagbisikleta kanunay, gusto nako nga adunay labing tukma nga kasayuran bahin sa kahimtang sa panahon sa lugar nga akong gisakyan.

Ang una nakong gihunahuna mao ang paghimo og gamay nga istasyon sa panahon sa DIY nga adunay mga sensor ug makadawat mga datos gikan niini. Apan wala nako "pagbag-o ang ligid" ug gipili ang kasayuran sa panahon nga gigamit sa sibil nga aviation ingon usa ka gigikanan sa napamatud-an nga datos, nga mao METAR (METeorological Aerodrome Report) ug trabaho (TAF - Pagtagna sa Terminal Aerodrome). Sa abyon, ang kinabuhi sa gatusan ka mga tawo nagdepende sa panahon, busa ang mga panagna ingon tukma kutob sa mahimo.

Kini nga impormasyon gisibya XNUMX/XNUMX pinaagi sa tingog sa matag modernong airfield sa porma ATIS (Awtomatikong Serbisyo sa Impormasyon sa Terminal) ug VOLMET (gikan sa French. vol - flight ug météo - panahon). Ang una naghatag og impormasyon mahitungod sa aktuwal nga panahon sa airfield, ug ang ikaduha naghatag og forecast alang sa sunod nga 24-30 ka oras, dili lamang sa broadcast airfield, kondili usab sa uban.

Pananglitan sa operasyon sa ATIS sa Vnukovo Airport:

Usa ka pananglitan kung giunsa ang VOLMET nagtrabaho sa Vnukovo Airport

Dili kombenyente ang pagdala sa usa ka radio scanner o transceiver uban kanimo matag higayon alang sa katugbang nga sakup, ug gusto nako nga maghimo usa ka bot sa Telegram nga, sa pag-klik sa usa ka buton, gitugotan ka nga makakuha sa parehas nga forecast. Labing menos dili praktikal ang paggahin og usa ka bulag nga server alang niini, ingon man ang pagpadala sa mga hangyo sa imong balay nga Raspberry.

Busa, nakahukom ko nga gamiton ang serbisyo isip backend Selectel Cloud Features. Ang gidaghanon sa mga hangyo mahimong mapasagdan, mao nga ang ingon nga serbisyo mahimong halos libre (sumala sa akong mga kalkulasyon, kini mahimong 22 nga mga rubles alang sa 100 nga mga hangyo).

Pag-andam sa backend

Paghimo og function

Sa control panel my.selectel.ru ablihi ang talan-awon Cloud plataporma ug paghimo og bag-ong proyekto:

Ang labing tukma nga forecast sa panahon: bot alang sa Telegram sa mga function sa panganod
Human mabuhat ang proyekto, adto sa seksyon Mga katuyoan:

Ang labing tukma nga forecast sa panahon: bot alang sa Telegram sa mga function sa panganod
Igduso ang buton Paghimo og function ug ihatag kini sa gusto nga ngalan:

Ang labing tukma nga forecast sa panahon: bot alang sa Telegram sa mga function sa panganod
Human sa pagpamugos Paghimo og function kita adunay representasyon sa gibuhat nga function:

Ang labing tukma nga forecast sa panahon: bot alang sa Telegram sa mga function sa panganod
Sa dili ka pa magsugod sa paghimo og code sa Python, kinahanglan nimo nga maghimo usa ka bot sa Telegram. Dili nako ihulagway kung giunsa kini gihimo - adunay mga detalyado nga panudlo sa among base sa kahibalo. Ang nag-unang butang alang kanamo mao ang timaan sa gibuhat nga bot.

Pag-andam sa code

Gipili nako ang National Oceanic and Atmospheric Administration (NOAA) isip tinubdan sa kasaligang datos. Kining siyentipikong ahensya nag-update sa datos sa tinuod nga panahon sa server niini sa TXT format.

Link aron makuha ang datos sa METAR (timan-i ang kaso):

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

Sa akong kaso, ang labing duol nga airport mao ang Vnukovo, ang ICAO code niini UUWW. Ang pag-adto sa nahimo nga URL maghatag sa mosunod:

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

Ang una nga linya mao ang karon nga oras sa forecast sa Greenwich Mean Time. Ang ikaduhang linya usa ka summary sa aktuwal nga panahon. Ang mga piloto sa sibil nga aviation walay problema sa pagsabut kung unsa ang gipasabut niini nga linya, apan kinahanglan namon ang katin-awan:

  • [UUWW] — Vnukovo, Moscow (Russia — RU);
  • [101130Z] — Ika-10 nga adlaw sa bulan, 11:30 am GMT;
  • [31004MPS] — direksyon sa hangin 310 degrees, gikusgon 4 m/s;
  • [9999] — pinahigda nga visibility 10 km o labaw pa;
  • [SCT048] — nagkatag/nagkatag nga mga panganod sa 4800 ka tiil (~1584 m);
  • [24/13] — temperatura 24 °C, tun-og 13 °C;
  • [Q1014] — pressure (QNH) 1014 hectopascals (750 mm Hg);
  • [R01/000070] - coefficient sa adhesion sa lane 01 - 0,70;
  • [NOSIG] - walay mahinungdanon nga mga kausaban.

Magsugod ta sa pagsulat sa program code. Una kinahanglan nimo nga i-import ang mga function Paghangyo и pytaf:

from urllib import request
import pytaf

Ipiho ang mga variable ug andama ang function sa pag-decode:

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

Mopadayon ta sa TAF (kaso importante man).

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

Sama sa miaging pananglitan, atong tan-awon ang forecast sa Vnukovo airport:

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

Atong hatagan ug pagtagad ilabina ang mga linya TEMPO и BECMG. Ang TEMPO nagpasabot nga ang aktuwal nga panahon sa gitakdang panahon mag-usab-usab matag karon ug unya. BECMG - anam-anam nga mausab ang panahon sulod sa gitakdang yugto sa panahon.

Sa ato pa, ang linya:

TEMPO 1012/1020 -TSRA BKN020CB

Magpasabot:

  • [1012/1020] — tali sa 12 ug 20 ka oras (Greenwich Mean Time);
  • [-TSRA] — thunderstorm (TS = thunderstorm) uban sa ulan (RA = rain) sa ubos nga intensity (minus sign);
  • [BKN020CB] - mahinungdanon (BKN = nabuak), cumulonimbus (CB = cumulonimbus) mga panganod sa 2000 ka tiil (610 metros) ibabaw sa lebel sa dagat.

Adunay daghang mga termino alang sa mga panghitabo sa panahon, ug ang paghinumdom niini lisud. Ang code alang sa hangyo sa TAF gisulat sa susamang paagi.

Pag-upload sa code sa panganod

Aron dili mausik ang panahon, magkuha ta ug telegram bot template gikan sa among repository cloud-telegram-bot. Adunay giandam nang daan mga kinahanglanon.txt и setup.py uban ang husto nga istruktura sa direktoryo.

Tungod kay sa code atong ma-access ang module pytaf, unya ang bersyon niini kinahanglang idugang dayon sa mga kinahanglanon.txt

pytaf~=1.2.1

  • Mopadayon ta sa pag-edit bot/tele_bot.py. Among tangtangon ang tanang wala kinahanglana nga mga butang ug idugang ang among 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)

  • Giputos namon ang tibuuk nga direktoryo sa usa ka ZIP archive ug moadto sa control panel sa gibuhat nga function.
  • I-klik dinhi I-edit ug i-download ang archive gamit ang code.

Ang labing tukma nga forecast sa panahon: bot alang sa Telegram sa mga function sa panganod

  • Pun-a ang paryente nga agianan sa file tele_bot (extension .py mahimong dili espesipiko) ug usa ka endpoint function (sa pananglitan nga gihatag kini mao ang nag-unang).
  • seksyon Mga Variable sa Kalikopan pagsulat ug variable TOKEN ug i-assign kini sa timaan sa gusto nga telegram bot.
  • I-klik dinhi I-save ug Ipalapad, pagkahuman adto mi sa section mga hinungdan.
  • Gibutang namon ang switch HTTP nga hangyoaron ipahibalo sa publiko ang hangyo.

Ang labing tukma nga forecast sa panahon: bot alang sa Telegram sa mga function sa panganod
Kami karon adunay usa ka URL alang sa publiko nga pagtawag sa function. Ang nahabilin mao na i-configure ang webhook. Pangitaa ang among bot @SelectelServerless_bot sa Telegram ug irehistro ang imong bot gamit ang sugo:

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

resulta

Kung ang tanan nahimo sa husto, ang imong bot magsugod dayon sa pagtrabaho ug ipakita ang pinakabag-o nga taho sa panahon sa aviation direkta sa messenger.

Ang labing tukma nga forecast sa panahon: bot alang sa Telegram sa mga function sa panganod
Siyempre, ang code mahimong mapauswag, apan bisan sa karon nga kahimtang igo na aron mahibal-an ang labing tukma nga panahon ug forecast gikan sa usa ka kasaligan nga gigikanan.

Makit-an nimo ang tibuuk nga bersyon sa code sa among mga repositoryo sa GitHub.

Ang labing tukma nga forecast sa panahon: bot alang sa Telegram sa mga function sa panganod

Source: www.habr.com

Idugang sa usa ka comment