แแ แกแแแแแก แฃแแแ แแแ แกแแ แแแกแ, แ แแแแแแช แแแแแแแแแ แแแแแแแก แจแแกแแฎแแ แแแคแแ แแแชแแแก, แแแแ แแ แ แแแแแก แฃแแแ แแแแแ? แ แแชแ แฎแจแแ แแ แแแแแฌแงแ แแแแแกแแแแแแ แกแแแ แฃแแ, แแแแแแแ แแฅแแแแแ แงแแแแแแ แแฃแกแขแ แแแคแแ แแแชแแ แแแแแแแก แแแ แแแแแแก แจแแกแแฎแแ แแ แแแแแแแก, แกแแแแช แแแแแแ .
แฉแแแ แแแ แแแแ แแแ แ แแงแ แแแขแแ แ แฌแแ แแแแแแ แแแแแแแก แกแแแแฃแ แแก แแจแแแแแ แกแแแกแแ แแแแ แแ แแแกแแแ แแแแแชแแแแแแก แแแฆแแแ. แแแแ แแ แแ แแ แแแแแแแแแแ แแแ แแแแ แแ แแแแ แฉแแ แแแแแแแก แแแคแแ แแแชแแ, แ แแแแแแช แแแแแแงแแแแแ แกแแแแฅแแแแฅแ แแแแแชแแแจแ, แ แแแแ แช แแแแแฌแแแแฃแแ แแแแแชแแแแแแก แฌแงแแ แ, แแแ แซแแ แแแขแแ แ (แแแขแแแ แแแแแแฃแ แ แแแ แแแ แแแแก แแแแแ แแจแ) แแ TAF (TAF - Terminal Aerodrome Forecast). แแแแแชแแแจแ แแกแแแแ แแแแแแแแแก แกแแชแแชแฎแแ แแแแแแแแ แแแแแแแแแแฃแแ, แแแแขแแ แแ แแแแแแแแ แแแฅแกแแแแแฃแ แแ แแฃแกแขแแ.
แแก แแแคแแ แแแชแแ XNUMX/XNUMX แฎแแแ แแแแแแชแแแ แงแแแแ แแแแแแแแ แแแ แแแ แแแ แแแแ แแ แคแแ แแแ แแขแแกแ (แแแขแแแแขแฃแ แ แขแแ แแแแแแแก แกแแแแคแแ แแแชแแ แกแแแกแแฎแฃแ แ) แแ แแแแแแขแ (แคแ แแแแฃแแแแแ. แขแแแ - แคแ แแแ แแ แแแขแแ - แแแแแแ). แแแ แแแแ แแแแฌแแแแก แแแคแแ แแแชแแแก แแแ แแแ แแแแก แคแแฅแขแแแ แแแ แแแแแแแก แจแแกแแฎแแ, แฎแแแ แแแแ แ แแแแแแแแแ แแ แแแแแแก แแแแแแแแ 24-30 แกแแแแแก แแแแแแแแแแแจแ, แแ แ แแฎแแแแ แกแแแแฃแฌแงแแแแ แแแ แแแ แแแแ, แแ แแแแ แกแฎแแแแแแช.
ATIS แแแแ แแชแแแก แแแแแแแแ แแแฃแแแแแก แแแ แแแแ แขแจแ:
แแแแแแแแ แแแแกแ, แแฃ แ แแแแ แแฃแจแแแแก VOLMET แแแฃแแแแแก แแแ แแแแ แขแจแ
แแ แแกแแกแแแแแแแแ แแฅแแแแแแ แ แแแแ แกแแแแแ แแก แแ แแแแแแชแแแแก แขแแ แแแ แงแแแแ แฏแแ แแ แจแแกแแแแแแกแ แแแแแแแแแแกแแแแก แแ แแแแแแแ แจแแแแฅแแแ แแแขแ Telegram-แจแ, แ แแแแแแช แฆแแแแแแ แแแฌแแแแฃแแแแแ แแแแชแแแ แกแแจแฃแแแแแแก แแแแฆแแ แแแแแ แแ แแแแแแ. แแแแกแแแแก แชแแแแ แกแแ แแแ แแก แแแแแงแแคแ, แแกแแแ แแฅแแแแก แกแแฎแแจแ Raspberry-แจแ แแแแฎแแแแแก แแแแแแแแ แแแแแช แแ แแแ แแฅแขแแแฃแแแ.
แแแแขแแ, แแแแแแฌแงแแแขแ แแแแแแแงแแแแแแแ แกแแ แแแกแ, แ แแแแ แช แกแแ แแแแ แแ แกแแจแฃแแแแแ
Backend แแแแแแแแแ
แจแแฅแแแแแ แคแฃแแฅแชแแ
แแแ แแแแก แแแแแแจแ
แแ แแแฅแขแแก แจแแฅแแแแก แจแแแแแ แแแแแแแ แแแแงแแคแแแแแแจแ แคแฃแแฅแชแแแแ:
แฒแแแญแแ แ แฆแแแแแก แจแแฅแแแแแ แคแฃแแฅแชแแ แแ แแแแชแแ แกแแกแฃแ แแแแ แกแแฎแแแ:
แแแญแแ แแก แจแแแแแ แจแแฅแแแแแ แคแฃแแฅแชแแ แฉแแแ แแแแฅแแแแ แจแแฅแแแแแ แคแฃแแฅแชแแแก แฌแแ แแแแแแแ:
แกแแแแ แแแแแแจแ แแแแแก แจแแฅแแแแก แแแแฌแงแแแ, แแฅแแแ แฃแแแ แจแแฅแแแแ แแแขแ 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 แแฆแ, 11:30 แกแแแแ GMT;
- [31004 MPS] โ แฅแแ แแก แแแแแ แแฃแแแแ 310 แแ แแแฃแกแ, แกแแฉแฅแแ แ 4 แ/แฌแ;
- [9999] - แฐแแ แแแแแขแแแฃแ แ แฎแแแแแแแแ 10 แแ แแ แแแขแ;
- [SCT048] โ แแแแแคแแแขแฃแแ/แแแคแแแขแฃแแ แฆแ แฃแแแแแ 4800 แคแฃแขแแ (~1584 แ);
- [24 / 13] โ แขแแแแแ แแขแฃแ แ 24ยฐC, แแแแแก แฌแแ แขแแแ 13ยฐC;
- [Q1014] โ แฌแแแแ (QNH) 1014 แฐแแฅแขแแแแกแแแแ (750 แแ Hg);
- [R01/000070] โ แแแแแแแแก แแแแคแแชแแแแขแ 01 แแแแแ โ 0,70;
- [NOSIG] - แแแแจแแแแแแแแแ แชแแแแแแแแแแก แแแ แแจแ.
แแแแแฌแงแแ แแ แแแ แแแแก แแแแแก แฌแแ แ. แฏแแ แคแฃแแฅแชแแแแแก แแแแแ แขแ แแญแแ แแแแแ แแแแแฎแแแแก ะธ แแแขแแคแ:
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
แแแแกแแแฃแแ แแแฃแแ แงแฃแ แแแฆแแแ แแแแแฅแชแแแ แฎแแแแแก TIME ะธ BECMG. TEMPO แแแจแแแแก, แ แแ แคแแฅแขแแแ แแแ แแแแแแ แแแแแแแแฃแแ แแแ แแแแแก แแแแแแแแแแแจแ แแแ แแแแฃแแแ แจแแแชแแแแแ. BECMG - แแแแแแ แแแแแแแแ แจแแแชแแแแแ แแแแแแแแฃแ แแแ แแแแจแ.
แแแฃ แฎแแแ:
TEMPO 1012/1020 -TSRA BKN020CB
แแแฃแแแกแฎแแแแ:
- [1012 / 1020] - 12-แแแ 20 แกแแแแแแแ (แแ แแแแแฉแแก แแ แ);
- [-TSRA] โ แญแแฅแ-แฅแฃแฎแแแ (TS = แญแแฅแ-แฅแฃแฎแแแ) แฌแแแแแ (RA = แฌแแแแ) แแแแแแ แแแขแแแกแแแแแแ (แแแแฃแก แแแจแแแ);
- [BKN020CB] - แแแแจแแแแแแแแแ (BKN = แแแขแแฎแแแ), แแฃแแฃแแแแแแแฃแกแแแ (CB = แแฃแแฃแแแแแแแฃแกแแแ) แฆแ แฃแแแแแ แแฆแแแก แแแแแแแ 2000 แคแฃแขแ (610 แแแขแ แ) แกแแแแฆแแแแ.
แแแแแแแก แคแแแแแแแแแแกแแแแก แกแแแแแแ แแแแ แ แขแแ แแแแแ แแ แแแแ แแแแแฎแกแแแ แแแ แ แแฃแแแ. TAF แแแแฎแแแแแก แแแแ แแฌแแ แแแ แแแแแแแแฃแ แแ.
แแแแแก แแขแแแ แแแ แฆแ แฃแแแแจแ
แแแแกแแแแแก, แ แแ แแ แ แแ แแแแแแ แแแ, แแแแฆแแ แขแแแแแ แแแแก แแแขแแก แจแแแแแแ แฉแแแแ แกแแชแแแแแแ
แแแแแแแแ แแแแจแ แจแแแแแแแ แ แแแแฃแแแ แแแขแแคแ, แแแจแแ แแแกแ แแแ แกแแ แแแฃแงแแแแแแแแ แฃแแแ แแแแแแขแแก แแแแฎแแแแแแ. 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 แแ แฅแแแจแ แแ แแแแแแแแแแ แ แแแ แแแแก แแแแแแแ แจแแฅแแแแ แคแฃแแฅแชแแแแ.
- แแแแฌแแแแฃแแแ แแฅ แ แแแแฅแขแแ แแแ แแ แแแแแแฌแแ แแ แแ แฅแแแ แแแแแ.
- แจแแแแกแแ แคแแ แแแแแแ แแแ แคแแแแจแ tele_bot (แแแคแแ แแแแแ .py แจแแแซแแแแ แแ แแงแแก แแแแแแแแฃแแ) แแ แกแแแแแแ แฌแแ แขแแแแก แคแฃแแฅแชแแ (แแแชแฃแ แแแแแแแแจแ แแก แแ แแก แแแแแแ แ).
- แแแฌแแแจแ แแแ แแแแก แชแแแแแแแ แแแฌแแ แแ แชแแแแแ แฒแฒแฒจแฒแฒแฒ แแ แแแแแแญแแ แแแก แกแแกแฃแ แแแแ แขแแแแแ แแแแก แแแขแแก แแแขแแแ.
- แแแแฌแแแแฃแแแ แแฅ แจแแแแฎแแ แแ แแแคแแ แแแแแ, แ แแก แจแแแแแแแช แแแแแแแแ แ แแแแงแแคแแแแแแจแ แแฌแแแแก.
- แฉแแแ แแแแแก แแแงแแแแแ HTTP แแแแฎแแแแแ แแ แแแแฎแแแแ แกแแฏแแ แ แแแฎแแแก.
แฉแแแ แแฎแแ แแแแฅแแก URL แคแฃแแฅแชแแแก แกแแฏแแ แ แแแแแซแแฎแแแแกแแแแก. แแแ แฉแ แแฎแแแแ
/setwebhook <you bot token> <public URL of your function>
แจแแแแแ
แแฃ แงแแแแแคแแ แ แกแฌแแ แแ แแแแแแแ, แแฅแแแแ แแแขแ แแแฃแงแแแแแแแแ แแแแฌแงแแแก แแฃแจแแแแแก แแ แแฉแแแแแแก แฃแแฎแแแก แกแแแแแแชแแ แแแแแแแก แแแแแ แแจแก แแแ แแแแแ แแแกแแแฏแแ แจแ.
แ แ แแฅแแ แฃแแแ, แแแแ แจแแแซแแแแ แแแฃแแฏแแแแกแแแก, แแแแ แแ แแฎแแแแแแ แแแแแแแ แแแแแจแแช แแ แกแแแแแ แแกแแ แกแแแแ แฌแงแแ แแแแ แงแแแแแแ แแฃแกแขแ แแแแแแแกแ แแ แแ แแแแแแแก แแแ แแแแแ.
แแแแแก แกแ แฃแ แแแ แกแแแก แแแฎแแแ แฉแแแแก แกแแแขแแ
แฌแงแแ แ: www.habr.com