Y rhagolygon tywydd mwyaf cywir: bot ar gyfer Telegram ar swyddogaethau cwmwl

Y rhagolygon tywydd mwyaf cywir: bot ar gyfer Telegram ar swyddogaethau cwmwl
Mae yna lawer o wasanaethau sy'n darparu gwybodaeth am y tywydd, ond pa un ddylech chi ymddiried ynddo? Pan ddechreuais i feicio'n aml, roeddwn i eisiau cael y wybodaeth fwyaf cywir am y tywydd yn y man lle rydw i'n reidio.

Fy meddwl cyntaf oedd adeiladu gorsaf dywydd DIY fechan gyda synwyryddion a derbyn data ohoni. Ond ni wnes i “ailddyfeisio'r olwyn” a dewisais wybodaeth am y tywydd a ddefnyddir mewn hedfan sifil fel ffynhonnell data wedi'i wirio, sef METAR (Adroddiad Maes Awyr METeorolegol) a TAF (TAF - Rhagolwg Maes Awyr Terfynol). Ym maes hedfan, mae bywydau cannoedd o bobl yn dibynnu ar y tywydd, felly mae rhagolygon mor gywir â phosib.

Darlledir y wybodaeth hon XNUMX/XNUMX ar lais ym mhob maes awyr modern ar y ffurf ATIS (Gwasanaeth Gwybodaeth Terfynell Awtomatig) a FOLMET (o'r Ffrangeg. vol - hedfan a Météo - tywydd). Mae'r cyntaf yn darparu gwybodaeth am y tywydd gwirioneddol yn y maes awyr, ac mae'r ail yn darparu rhagolwg ar gyfer y 24-30 awr nesaf, nid yn unig yn y maes awyr darlledu, ond hefyd mewn eraill.

Enghraifft o weithrediad ATIS ym maes awyr Vnukovo:

Enghraifft o sut mae VOLMET yn gweithio ym Maes Awyr Vnukovo

Mae'n anghyfleus cario sganiwr radio neu drosglwyddydd gyda chi bob tro ar gyfer yr ystod gyfatebol, ac roeddwn i eisiau creu bot yn Telegram sydd, trwy glicio botwm, yn caniatáu ichi gael yr un rhagolwg. Mae o leiaf yn anymarferol i ddyrannu gweinydd ar wahân ar gyfer hyn, yn ogystal ag anfon ceisiadau at eich cartref Mafon.

Felly, penderfynais ddefnyddio’r gwasanaeth fel cefn Nodweddion Cloud Selectel. Bydd nifer y ceisiadau yn ddibwys, felly bydd gwasanaeth o'r fath bron yn rhad ac am ddim (yn ôl fy nghyfrifiadau, bydd yn 22 rubles ar gyfer 100 o geisiadau).

Paratoi backend

Creu swyddogaeth

Yn y panel rheoli fy.selectel.ru agor yr olygfa Llwyfan cwmwl a chreu prosiect newydd:

Y rhagolygon tywydd mwyaf cywir: bot ar gyfer Telegram ar swyddogaethau cwmwl
Ar ôl i'r prosiect gael ei greu, ewch i'r adran Swyddogaethau:

Y rhagolygon tywydd mwyaf cywir: bot ar gyfer Telegram ar swyddogaethau cwmwl
Gwthiwch y botwm Creu swyddogaeth a rhowch yr enw dymunol iddo:

Y rhagolygon tywydd mwyaf cywir: bot ar gyfer Telegram ar swyddogaethau cwmwl
Ar ôl pwyso Creu swyddogaeth bydd gennym gynrychiolaeth o'r swyddogaeth a grëwyd:

Y rhagolygon tywydd mwyaf cywir: bot ar gyfer Telegram ar swyddogaethau cwmwl
Cyn i chi ddechrau creu cod yn Python, bydd angen i chi greu bot yn Telegram. Wna i ddim disgrifio sut mae hyn yn cael ei wneud - mae yna gyfarwyddiadau manwl yn ein sylfaen wybodaeth. Y prif beth i ni yw tocyn y bot a grëwyd.

Paratoi'r cod

Dewisais y Weinyddiaeth Eigionol ac Atmosfferig Genedlaethol (NOAA) fel ffynhonnell data dibynadwy. Mae'r asiantaeth wyddonol hon yn diweddaru data mewn amser real ar ei gweinydd mewn fformat TXT.

Dolen i gael data METAR (nodwch yr achos):

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

Yn fy achos i, y maes awyr agosaf yw Vnukovo, ei god ICAO yw UUWW. Bydd mynd i'r URL a gynhyrchir yn rhoi'r canlynol:

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

Y llinell gyntaf yw amser presennol y rhagolwg yn Amser Cymedrig Greenwich. Mae'r ail linell yn grynodeb o'r tywydd gwirioneddol. Ni fydd gan beilotiaid hedfan sifil unrhyw broblem yn deall beth mae’r llinell hon yn ei olygu, ond mae angen esboniad arnom:

  • [UUWW] - Vnukovo, Moscow (Rwsia - RU);
  • [101130Z] — 10fed diwrnod o'r mis, 11:30 am GMT;
  • [31004MPS] — cyfeiriad y gwynt 310 gradd, cyflymder 4 m/s;
  • [9999] — gwelededd llorweddol 10 km neu fwy;
  • [SCT048] — cymylau gwasgaredig/gwasgaredig yn 4800 troedfedd (~1584m);
  • [24 / 13] - tymheredd 24 ° C, pwynt gwlith 13 ° C;
  • [C1014] — pwysedd (QNH) 1014 hectopascals (750 mm Hg);
  • [R01/000070] — cyfernod adlyniad ar lôn 01 - 0,70;
  • [NOSIG] - heb newidiadau sylweddol.

Gadewch i ni ddechrau ysgrifennu cod rhaglen. Yn gyntaf mae angen i chi fewnforio swyddogaethau ofyn am и pytaf:

from urllib import request
import pytaf

Nodwch y newidynnau a pharatowch y swyddogaeth datgodio:

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

Gadewch i ni symud ymlaen i TAF (mae'r achos hefyd yn bwysig).

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

Fel yn yr enghraifft flaenorol, gadewch i ni edrych ar y rhagolwg ym maes awyr 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

Gadewch inni roi sylw arbennig i'r llinellau TEMPO и BECMG. Mae TEMPO yn golygu y bydd y tywydd gwirioneddol yn ystod y cyfnod penodedig yn newid o bryd i'w gilydd. BECMG - bydd y tywydd yn newid yn raddol o fewn cyfnod penodol o amser.

Hynny yw, y llinell:

TEMPO 1012/1020 -TSRA BKN020CB

Bydd yn golygu:

  • [1012 / 1020] — rhwng 12 ac 20 awr (Amser Cymedrig Greenwich);
  • [-TSRA] — storm fellt a tharanau (TS = storm a tharanau) gyda glaw (RA = glaw) o ddwysedd isel (arwydd minws);
  • [BKN020CB] - cymylau sylweddol (BKN = wedi torri), cumulonimbus (CB = cumulonimbus) ar 2000 troedfedd (610 metr) uwch lefel y môr.

Mae cryn dipyn o dermau ar gyfer ffenomenau tywydd, ac mae'n anodd eu cofio. Mae'r cod ar gyfer cais TAF wedi'i ysgrifennu mewn ffordd debyg.

Wrthi'n uwchlwytho cod i'r cwmwl

Er mwyn peidio â gwastraffu amser, gadewch i ni gymryd templed bot telegram o'n cadwrfa cwmwl-telegram-bot. Mae rhag-baratoi gofynion.txt и setup.py gyda'r strwythur cyfeiriadur cywir.

Oherwydd yn y cod byddwn yn cyrchu'r modiwl pytaf, yna dylid ychwanegu at ei fersiwn ar unwaith gofynion.txt

pytaf~=1.2.1

  • Gadewch i ni symud ymlaen i olygu bot/tele_bot.py. Rydym yn dileu pob peth diangen ac yn ychwanegu ein cod.

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)

  • Rydyn ni'n pacio'r cyfeiriadur cyfan i mewn i archif ZIP ac yn mynd i'r panel rheoli i'r swyddogaeth a grëwyd.
  • Gwthio Golygu a lawrlwythwch yr archif gyda'r cod.

Y rhagolygon tywydd mwyaf cywir: bot ar gyfer Telegram ar swyddogaethau cwmwl

  • Llenwch y llwybr cymharol yn y ffeil tele_bot (estyniad .py efallai na chaiff ei nodi) a ffwythiant pwynt terfyn (yn yr enghraifft a roddir dyma prif).
  • Yn adran Newidynnau Amgylcheddol ysgrifennu newidyn TOCYN a neilltuo iddo arwydd y bot telegram a ddymunir.
  • Gwthio Arbed ac Ehangu, ac ar ôl hynny rydym yn mynd i'r adran sbardunau.
  • Rydyn ni'n rhoi'r switsh Cais HTTPi wneud y cais yn gyhoeddus.

Y rhagolygon tywydd mwyaf cywir: bot ar gyfer Telegram ar swyddogaethau cwmwl
Mae gennym bellach URL ar gyfer galw'r swyddogaeth yn gyhoeddus. Y cyfan sydd ar ôl yw ffurfweddu bachyn gwe. Dewch o hyd i'n bot @SelectelServerless_bot yn Telegram a chofrestrwch eich bot gyda'r gorchymyn:

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

Canlyniad

Os gwneir popeth yn gywir, bydd eich bot yn dechrau gweithio ar unwaith ac yn arddangos yr adroddiad tywydd hedfan diweddaraf yn uniongyrchol yn y negesydd.

Y rhagolygon tywydd mwyaf cywir: bot ar gyfer Telegram ar swyddogaethau cwmwl
Wrth gwrs, gellir gwella'r cod, ond hyd yn oed yn ei gyflwr presennol mae'n ddigon i ddarganfod y tywydd a'r rhagolygon mwyaf cywir o ffynhonnell ddibynadwy.

Fe welwch y fersiwn lawn o'r cod yn ein storfeydd ar GitHub.

Y rhagolygon tywydd mwyaf cywir: bot ar gyfer Telegram ar swyddogaethau cwmwl

Ffynhonnell: hab.com

Ychwanegu sylw