An ro-aithris sìde as ceart: bot airson Telegram air gnìomhan sgòthan

An ro-aithris sìde as ceart: bot airson Telegram air gnìomhan sgòthan
Tha tòrr sheirbheisean ann a bheir seachad fiosrachadh mun aimsir, ach dè am fear air am bu chòir earbsa a bhith agad? Nuair a thòisich mi air baidhsagal gu tric, bha mi airson gum biodh am fiosrachadh as cinntiche agam mun t-sìde san àite far a bheil mi a’ rothaireachd.

B’ e a’ chiad bheachd a bh’ agam stèisean sìde beag DIY a thogail le mothachairean agus dàta fhaighinn bhuaithe. Ach cha do rinn mi “a’ chuibhle ath-thòiseachadh ”agus thagh mi fiosrachadh sìde a thathas a’ cleachdadh ann an itealain catharra mar stòr dàta dearbhte, is e sin METAR (Aithisg Meteorological Aerodrome) agus TAF (TAF - Tuairmse Port-adhair Terminal). Ann an itealain, tha beatha ceudan de dhaoine an urra ris an t-sìde, agus mar sin tha na ro-innsean cho ceart ‘s a ghabhas.

Tha am fiosrachadh seo air a chraoladh XNUMX/XNUMX le guth aig gach raon-adhair ùr san fhoirm ATIS (Seirbheis Fiosrachaidh Terminal fèin-ghluasadach) agus BHEILIDH (bhon Fhraingis. vol - itealaich agus Aimsir - aimsir). Tha a 'chiad fhear a' toirt seachad fiosrachadh mun fhìor aimsir aig an raon-adhair, agus tha an dàrna fear a 'toirt seachad ro-aithris airson an ath 24-30 uair, chan ann a-mhàin aig an raon-adhair craolaidh, ach cuideachd aig cuid eile.

Eisimpleir de ghnìomhachd ATIS aig Port-adhair Vnukovo:

Eisimpleir de mar a tha VOLMET ag obair aig Port-adhair Vnukovo

Tha e mì-ghoireasach sganair rèidio no transceiver a ghiùlan leat a h-uile uair airson an raon fhreagarrach, agus bha mi airson bot a chruthachadh ann an Telegram a leigeas leat, le cliogadh putan, an aon ro-aithris fhaighinn. Tha e co-dhiù mì-ghoireasach seirbheisiche air leth a riarachadh airson seo, a bharrachd air a bhith a’ cur iarrtasan chun sùbh-craoibhe dachaigh agad.

Mar sin, chuir mi romham an t-seirbheis a chleachdadh mar chùl-taic Feartan Selectel Cloud. Bidh an àireamh de dh'iarrtasan glè bheag, agus mar sin bidh a leithid de sheirbheis cha mhòr an-asgaidh (a rèir mo àireamhachadh, bidh e 22 rubles airson 100 iarrtas).

Ag ullachadh cùl-taic

A 'cruthachadh gnìomh

Ann am Pannal Smachd mo.selectel.ru fosgail an sealladh Àrd-ùrlar sgòthan agus cruthaich pròiseact ùr:

An ro-aithris sìde as ceart: bot airson Telegram air gnìomhan sgòthan
Às deidh don phròiseact a bhith air a chruthachadh, rachaibh chun roinn Feartan:

An ro-aithris sìde as ceart: bot airson Telegram air gnìomhan sgòthan
Put air a 'phutan Cruthaich gnìomh agus thoir an t-ainm a tha thu ag iarraidh air:

An ro-aithris sìde as ceart: bot airson Telegram air gnìomhan sgòthan
An dèidh bruthadh Cruthaich gnìomh bidh riochdachadh againn den ghnìomh chruthaichte:

An ro-aithris sìde as ceart: bot airson Telegram air gnìomhan sgòthan
Mus tòisich thu a’ cruthachadh còd ann am Python, feumaidh tu bot a chruthachadh ann an Telegram. Cha toir mi cunntas air mar a tha seo air a dhèanamh - tha stiùireadh mionaideach ann nar bunait eòlais. Is e am prìomh rud dhuinn comharra an bot a chaidh a chruthachadh.

Ag ullachadh a 'chòd

Thagh mi an National Oceanic and Atmospheric Administration (NOAA) mar thobar de dhàta earbsach. Bidh a’ bhuidheann shaidheansail seo ag ùrachadh dàta ann an àm fìor air an t-seirbheisiche aca ann an cruth TXT.

Ceangal gus dàta METAR fhaighinn (thoir an aire don chùis):

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

Anns a 'chùis agam, is e Vnukovo am port-adhair as fhaisge, is e an còd ICAO aige UUWW. Ma thèid thu chun an URL a chaidh a chruthachadh bheir thu na leanas:

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

Is e a’ chiad loidhne an àm a tha an ro-aithris ann an Greenwich Mean Time. Tha an dàrna loidhne na gheàrr-chunntas air an fhìor aimsir. Cha bhi duilgheadas sam bith aig pìleatan itealain catharra a bhith a’ tuigsinn dè tha an loidhne seo a’ ciallachadh, ach feumaidh sinn mìneachadh:

  • [UUWW] - Vnukovo, Moscow (An Ruis - RU);
  • [101130Z] - 10mh latha den mhìos, 11:30m GMT;
  • [31004MPS] - stiùireadh na gaoithe 310 ceum, astar 4 m / s;
  • [9999] - faicsinneachd chòmhnard 10 km no barrachd;
  • [SCT048] - sgòthan sgapte/sgapte aig 4800 troigh (~1584m);
  • [24 / 13] - teòthachd 24 ° C, puing drùchd 13 ° C;
  • [Q1014] - cuideam (QNH) 1014 hectopascals (750 mm Hg);
  • [R01/000070] - co-èifeachd adhesion air an t-sreath 01 - 0,70;
  • [NOSIG] - gun atharrachaidhean mòra.

Feuch an tòisich sinn a’ sgrìobhadh còd a’ phrògraim. An toiseach feumaidh tu gnìomhan a thoirt a-steach iarrtas и pytaf:

from urllib import request
import pytaf

Sònraich na caochladairean agus ullaich an gnìomh dì-chòdaidh:

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

Gluaisidh sinn air adhart gu TAF (tha cùis cudromach cuideachd).

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

Mar a bha san eisimpleir roimhe, leig dhuinn sùil a thoirt air an ro-aithris aig port-adhair 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

Leig dhuinn gu sònraichte aire a thoirt do na loidhnichean AM FEAR и BECMG. Tha TEMPO a’ ciallachadh gun atharraich an fhìor aimsir rè na h-ùine ainmichte bho àm gu àm. BECMG - bidh an aimsir ag atharrachadh mean air mhean taobh a-staigh ùine shònraichte.

Is e sin, an loidhne:

TEMPO 1012/1020 -TSRA BKN020CB

Bidh a’ ciallachadh:

  • [1012 / 1020] - eadar 12 agus 20 uairean (Greenwich Mean Time);
  • [-TSRA] - stoirm tàirneanaich (TS = stoirm tàirneanaich) le uisge (RA = uisge) de dhian ìosal (soidhne minus);
  • [BKN020CB] - sgòthan cudromach (BKN = briste), cumulonimbus (CB = cumulonimbus) aig 2000 troigh (610 meatairean) os cionn ìre na mara.

Tha tòrr teirmean ann airson uinneanan sìde, agus tha e duilich cuimhneachadh orra. Tha an còd airson iarrtas TAF air a sgrìobhadh san aon dòigh.

Còd a luchdadh a-nuas gu neòil

Gus nach caill sinn ùine, bheir sinn teamplaid bot teileagram bhon stòr againn sgòth-teileagram-bot. Tha ullachadh ro-làimh ann riatanasan.txt и suidheachadh.py leis an structar eòlaire ceart.

Leis anns a 'chòd bidh sinn a' faighinn cothrom air a 'mhodal pytaf, an uairsin bu chòir an dreach aige a chuir ris sa bhad riatanasan.txt

pytaf~=1.2.1

  • Gluaisidh sinn air adhart gu deasachadh bot/tele_bot.py. Bidh sinn a’ toirt air falbh a h-uile rud neo-riatanach agus a’ cur a’ chòd againn ris.

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)

  • Bidh sinn a’ pacadh an eòlaire gu lèir a-steach do thasglann ZIP agus a’ dol chun phannal smachd chun ghnìomh cruthaichte.
  • Brùth Deasaich agus luchdaich sìos an tasglann leis a 'chòd.

An ro-aithris sìde as ceart: bot airson Telegram air gnìomhan sgòthan

  • Lìon a-steach an t-slighe càirdeach san fhaidhle tele_bot (leudachadh .py dh’ fhaodadh nach eil e air a shònrachadh) agus gnìomh puing crìochnachaidh (san eisimpleir air a thoirt seachad tha seo prìomh).
  • earrann Caochlaidhean Àrainneachd sgrìobh caochladair TOKEN agus sònraich dha comharra an teileagram bot a tha thu ag iarraidh.
  • Brùth Sàbhail is Leudaich, às deidh sin thèid sinn chun na h-earrainn Triggers.
  • Chuir sinn an suidse Iarrtas HTTPgus an t-iarrtas a dhèanamh poblach.

An ro-aithris sìde as ceart: bot airson Telegram air gnìomhan sgòthan
Tha URL againn a-nis airson an gnìomh a ghairm gu poblach. Chan eil air fhàgail ach rèiteachadh webbook. Lorg am bot againn @SelectelServerless_bot ann an Telegram agus clàraich do bot leis an àithne:

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

thoradh air

Ma thèid a h-uile càil a dhèanamh ceart, tòisichidh am bot agad ag obair sa bhad agus seallaidh e an aithisg sìde itealain as ùire gu dìreach san teachdaire.

An ro-aithris sìde as ceart: bot airson Telegram air gnìomhan sgòthan
Gu dearbh, faodar an còd a leasachadh, ach eadhon anns an t-suidheachadh làithreach aige tha e gu leòr faighinn a-mach an aimsir agus an ro-aithris as cinntiche bho stòr earbsach.

Lorgaidh tu an dreach slàn den chòd nar stòran air GitHub.

An ro-aithris sìde as ceart: bot airson Telegram air gnìomhan sgòthan

Source: www.habr.com

Cuir beachd ann