Цаг агаарын хамгийн зөв урьдчилсан мэдээ: үүлэн функц дээр Telegram-д зориулсан робот

Цаг агаарын хамгийн зөв урьдчилсан мэдээ: үүлэн функц дээр Telegram-д зориулсан робот
Цаг агаарын мэдээлэл өгдөг олон үйлчилгээ байдаг ч та алинд нь итгэх ёстой вэ? Байн байн дугуй унаж эхлэхдээ унадаг газрынхаа цаг агаарын нөхцөл байдлын талаар хамгийн үнэн зөв мэдээлэлтэй байхыг хүсдэг байсан.

Миний анхны бодол мэдрэгч бүхий жижиг DIY цаг уурын станц барьж, түүнээс мэдээлэл хүлээн авах явдал байв. Гэхдээ би "дугуйг дахин зохион бүтээгээгүй" бөгөөд иргэний нисэхэд ашигладаг цаг агаарын мэдээллийг баталгаажуулсан мэдээллийн эх сурвалж болгон сонгосон. Метар (METorological Aerodrome Report) болон TAF (TAF - терминалын аэродромын урьдчилсан мэдээ). Нисэхийн салбарт олон зуун хүний ​​амьдрал цаг агаарын байдлаас хамаардаг тул урьдчилсан мэдээг аль болох үнэн зөв гаргадаг.

Энэхүү мэдээллийг орчин үеийн нисэх онгоцны буудал бүрт дуу хоолойгоор XNUMX/XNUMX хэлбэрээр дамжуулдаг ATIS (Автомат терминалын мэдээллийн үйлчилгээ) болон VOLMET (Франц хэлнээс. vol - нислэг ба météo - цаг агаар). Эхнийх нь нисэх онгоцны буудал дахь цаг агаарын бодит байдлын талаархи мэдээллийг өгдөг бол хоёр дахь нь зөвхөн өргөн нэвтрүүлгийн нисэх онгоцны буудалд төдийгүй бусад газруудад ойрын 24-30 цагийн урьдчилсан мэдээг өгдөг.

Внуково нисэх онгоцны буудлын ATIS-ийн ажиллагааны жишээ:

Внуково нисэх онгоцны буудал дээр VOLMET хэрхэн ажилладаг тухай жишээ

Тохиромжтой зайд радио сканнер эсвэл дамжуулагчийг авч явах нь тохиромжгүй тул би Telegram дээр нэг товчлуур дээр дарахад л ижил прогнозыг авах боломжийг олгодог робот үүсгэхийг хүссэн. Үүний тулд тусдаа сервер хуваарилах, түүнчлэн гэртээ Raspberry руу хүсэлт илгээх нь наад зах нь боломжгүй юм.

Тиймээс би уг үйлчилгээг backend болгон ашиглахаар шийдсэн Үүлний онцлогуудыг сонгоно уу. Хүсэлтийн тоо өчүүхэн байх тул ийм үйлчилгээ бараг үнэ төлбөргүй байх болно (миний тооцооллоор 22 хүсэлтэд 100 рубль байх болно).

Ар талын бэлтгэл

Функц үүсгэх

Хяналтын самбарт my.selectel.ru үзэмжийг нээх Үүлэн платформ болон шинэ төсөл үүсгэх:

Цаг агаарын хамгийн зөв урьдчилсан мэдээ: үүлэн функц дээр Telegram-д зориулсан робот
Төслийг үүсгэсний дараа хэсэг рүү очно уу Чиг үүрэг:

Цаг агаарын хамгийн зөв урьдчилсан мэдээ: үүлэн функц дээр Telegram-д зориулсан робот
Товчлуурыг дарна уу Функц үүсгэх мөн хүссэн нэрээ өгнө үү:

Цаг агаарын хамгийн зөв урьдчилсан мэдээ: үүлэн функц дээр Telegram-д зориулсан робот
Дарсны дараа Функц үүсгэх Бид үүсгэсэн функцийн төлөөлөлтэй байх болно:

Цаг агаарын хамгийн зөв урьдчилсан мэдээ: үүлэн функц дээр Telegram-д зориулсан робот
Python дээр код үүсгэж эхлэхээсээ өмнө Telegram дээр робот үүсгэх хэрэгтэй. Үүнийг хэрхэн хийхийг би тайлбарлахгүй - нарийвчилсан заавар байдаг бидний мэдлэгийн санд. Бидний хувьд гол зүйл бол үүсгэсэн ботын жетон юм.

Кодыг бэлтгэж байна

Би Далай, Агаар мандлын Үндэсний Захиргааг (NOAA) найдвартай мэдээллийн эх сурвалж болгон сонгосон. Энэхүү шинжлэх ухааны агентлаг нь сервер дээрээ TXT форматаар өгөгдлийг бодит цаг хугацаанд шинэчилдэг.

METAR өгөгдлийг авах холбоос (хэргийг анхаарна уу):

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

Миний хувьд хамгийн ойрын нисэх онгоцны буудал бол Внуково, түүний ICAO код юм UUWW. Үүсгэсэн URL руу очих нь дараахь зүйлийг өгнө.

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

Эхний мөр нь Гринвичийн дундаж цагийн урьдчилсан мэдээний одоогийн цаг юм. Хоёр дахь мөр нь бодит цаг агаарын тойм юм. Иргэний нисэхийн нисгэгчид энэ шугамын утгыг ойлгоход асуудал гарахгүй, гэхдээ бидэнд тайлбар хэрэгтэй байна.

  • [UUWW] - Внуково, Москва (Орос - RU);
  • [101130Z] - сарын 10-ны өдөр, GMT-ийн 11:30;
  • [31004MPS] — салхины чиглэл 310 градус, хурд 4 м/с;
  • [9999] - хэвтээ харагдах байдал 10 км ба түүнээс дээш;
  • [SCT048] — 4800 фут (~1584 м) өндөрт тархсан/тарсан үүл;
  • [24 / 13] - температур 24 ° C, шүүдэр цэг 13 ° C;
  • [Асуулт 1014] — даралт (QNH) 1014 гектопаскаль (750 мм м.у.б);
  • [R01/000070] - 01-р эгнээний наалдацын коэффициент - 0,70;
  • [NOSIG] - мэдэгдэхүйц өөрчлөлтгүйгээр.

Програмын код бичиж эхэлцгээе. Эхлээд та функцуудыг импортлох хэрэгтэй Хүсэлт и pytaf:

from urllib import request
import pytaf

Хувьсагчдыг тодорхойлж, код тайлах функцийг бэлтгэ:

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

TAF руу шилжье (хэрэг бас чухал).

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

Өмнөх жишээний нэгэн адил Внуково нисэх онгоцны буудлын урьдчилсан мэдээг харцгаая.

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

Ялангуяа шугаманд анхаарлаа хандуулцгаая TEMPO и BECMG. TEMPO гэдэг нь заасан хугацаанд цаг агаарын бодит байдал үе үе өөрчлөгдөнө гэсэн үг. BECMG - тодорхой хугацаанд цаг агаар аажмаар өөрчлөгдөнө.

Энэ нь шугам:

TEMPO 1012/1020 -TSRA BKN020CB

Үүнд:

  • [1012 / 1020] - 12-20 цагийн хооронд (Гринвичийн дундаж цаг);
  • [-TSRA] — аадар бороо (TS = аянга цахилгаан) бороотой (RA = бороо) бага эрчимтэй (хасах тэмдэг);
  • [BKN020CB] - далайн түвшнээс дээш 2000 фут (610 метр) өндөрт мэдэгдэхүйц (BKN = эвдэрсэн), cumulonimbus (CB = cumulonimbus) үүлс.

Цаг агаарын үзэгдлийн талаар маш олон нэр томъёо байдаг бөгөөд тэдгээрийг санах нь хэцүү байдаг. TAF хүсэлтийн кодыг ижил төстэй байдлаар бичсэн болно.

Клоуд руу код байршуулж байна

Цаг үрэхгүйн тулд манай репозитороос телеграм ботын загварыг авцгаая үүл-телеграм-бот. Урьдчилан бэлтгэсэн байдаг шаардлага.txt и setup.py лавлах зөв бүтэцтэй.

Кодын хувьд бид модульд хандах болно pytaf, дараа нь түүний хувилбарыг нэн даруй нэмэх хэрэгтэй шаардлага.txt

pytaf~=1.2.1

  • Засварлах ажил руугаа явцгаая bot/tele_bot.py. Бид бүх шаардлагагүй зүйлсийг устгаж, кодыг нэмнэ.

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)

  • Бид бүх лавлахыг ZIP архивт хийж, үүсгэсэн функц руу хяналтын самбар руу очно.
  • Түлхэх Засварлах кодтой архивыг татаж аваарай.

Цаг агаарын хамгийн зөв урьдчилсан мэдээ: үүлэн функц дээр Telegram-д зориулсан робот

  • Файл дахь харьцангуй замыг бөглөнө үү теле_бот (өргөтгөл .py зааж өгөөгүй байж болно) болон төгсгөлийн цэгийн функц (өгөгдсөн жишээнд энэ байна үндсэн).
  • хэсэг Хүрээлэн буй орчны хувьсагчид хувьсагч бичих Тэмдэглэгээ мөн түүнд хүссэн телеграм ботын жетоныг оноож өгнө үү.
  • Түлхэх Хадгалж, өргөжүүлнэ үү, үүний дараа бид хэсэг рүү очно Триггерүүд.
  • Бид шилжүүлэгчийг тавьдаг HTTP хүсэлтхүсэлтийг олон нийтэд ил болгох.

Цаг агаарын хамгийн зөв урьдчилсан мэдээ: үүлэн функц дээр Telegram-д зориулсан робот
Бид одоо функцийг олон нийтэд дуудах URL-тай боллоо. Үлдсэн бүх зүйл вэб дэгээг тохируулах. Манай роботыг олоорой @SelectelServerless_bot Telegram дээр өөрийн роботыг дараах тушаалаар бүртгүүлнэ үү.

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

үр дүн

Хэрэв бүх зүйл зөв хийгдсэн бол таны робот шууд ажиллаж эхлэх бөгөөд хамгийн сүүлийн үеийн агаарын тээврийн цаг агаарын мэдээг мессенжерт шууд харуулах болно.

Цаг агаарын хамгийн зөв урьдчилсан мэдээ: үүлэн функц дээр Telegram-д зориулсан робот
Мэдээжийн хэрэг, кодыг сайжруулж болно, гэхдээ одоо байгаа нөхцөлд ч найдвартай эх сурвалжаас цаг агаар, урьдчилсан мэдээг олж мэдэхэд хангалттай.

Та кодын бүрэн хувилбарыг манай сайтаас олох болно GitHub дээрх агуулахууд.

Цаг агаарын хамгийн зөв урьдчилсан мэдээ: үүлэн функц дээр Telegram-д зориулсан робот

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх