рддреНрдпрд╣рд╛рдБ рдзреЗрд░реИ рд╕реЗрд╡рд╛рд╣рд░реВ рдЫрдиреН рдЬрд╕рд▓реЗ рдореМрд╕рдо рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫ, рддрд░ рддрдкрд╛рдИрдВрд▓реЗ рдХреБрдирд▓рд╛рдИ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдЧрд░реНрдиреБрдкрд░реНрдЫ? рдЬрдм рдореИрд▓реЗ рдмрд╛рд░рдореНрдмрд╛рд░ рд╕рд╛рдЗрдХрд▓ рдЪрд▓рд╛рдЙрди рдерд╛рд▓реЗрдБ, рдо рдЬрд╣рд╛рдБ рд╕рд╡рд╛рд░реА рдЧрд░реНрдЫреБ рддреНрдпрд╣рд╛рдБрдХреЛ рдореМрд╕рдордХреЛ рдЕрд╡рд╕реНрдерд╛рдХреЛ рдмрд╛рд░реЗрдорд╛ рд╕рдмреИрднрдиреНрджрд╛ рд╕рд╣реА рдЬрд╛рдирдХрд╛рд░реА рдкрд╛рдЙрди рдЪрд╛рд╣рдиреНрдереЗрдВред
рдореЗрд░реЛ рдкрд╣рд┐рд▓реЛ рд╕реЛрдЪ рд╕реЗрдиреНрд╕рд░рдХреЛ рд╕рд╛рде рдПрдЙрдЯрд╛ рд╕рд╛рдиреЛ DIY рдореМрд╕рдо рд╕реНрдЯреЗрд╢рди рдЬрдореНрдорд╛ рдЧрд░реНрдиреЗ рд░ рддреНрдпрд╕рдмрд╛рдЯ рдбрд╛рдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗ рдерд┐рдпреЛред рддрд░ рдореИрд▓реЗ "рд╣реНрд╡реАрд▓ рдкреБрди: рдЖрд╡рд┐рд╖реНрдХрд╛рд░" рдЧрд░рд┐рди рд░ рдкреНрд░рдорд╛рдгрд┐рдд рдбрд╛рдЯрд╛рдХреЛ рд╕реНрд░реЛрддрдХреЛ рд░реВрдкрдорд╛ рдирд╛рдЧрд░рд┐рдХ рдЙрдбреНрдбрдпрдирдорд╛ рдкреНрд░рдпреЛрдЧ рд╣реБрдиреЗ рдореМрд╕рдо рдЬрд╛рдирдХрд╛рд░реА рдЫрдиреЛрдЯ рдЧрд░реЗрдВ, рдЕрд░реНрдерд╛рддреНред METAR (Meteorological Aerodrome Report) рд░ рдХрд╛рдо (TAF - рдЯрд░реНрдорд┐рдирд▓ рдПрд░реЛрдбреНрд░реЛрдо рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди)ред рдЙрдбреНрдбрдпрдирдорд╛, рд╕рдпреМрдВ рдорд╛рдирд┐рд╕рд╣рд░реВрдХреЛ рдЬреАрд╡рди рдореМрд╕рдордорд╛ рдирд┐рд░реНрднрд░ рд╣реБрдиреНрдЫ, рддреНрдпрд╕реИрд▓реЗ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреАрд╣рд░реВ рд╕рдХреЗрд╕рдореНрдо рд╕рд╣реА рд╣реБрдиреНрдЫрдиреНред
рдпреЛ рдЬрд╛рдирдХрд╛рд░реА рдлрд╛рд░рдордорд╛ рд╣рд░реЗрдХ рдЖрдзреБрдирд┐рдХ рдПрдпрд░рдлрд┐рд▓реНрдбрдорд╛ рдЖрд╡рд╛рдЬрджреНрд╡рд╛рд░рд╛ XNUMX/XNUMX рдкреНрд░рд╕рд╛рд░рдг рдЧрд░рд┐рдиреНрдЫ ATIS (рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЯрд░реНрдорд┐рдирд▓ рд╕реВрдЪрдирд╛ рд╕реЗрд╡рд╛) рд░ рднреЛрд▓реНрдореЗрдЯ (рдлреНрд░реЗрдиреНрдЪрдмрд╛рдЯред vol - рдЙрдбрд╛рди рд░ рдореЗрдЯреЛ - рдореМрд╕рдо)ред рдкрд╣рд┐рд▓реЛрд▓реЗ рдПрдпрд░рдлрд┐рд▓реНрдбрдорд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореМрд╕рдордХреЛ рдмрд╛рд░реЗрдорд╛ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫ, рд░ рджреЛрд╕реНрд░реЛрд▓реЗ рдкреНрд░рд╕рд╛рд░рдг рдПрдпрд░рдлрд┐рд▓реНрдбрдорд╛ рдорд╛рддреНрд░ рд╣реЛрдЗрди, рдЕрд░реВрдорд╛ рдкрдирд┐ рдЕрд░реНрдХреЛ 24-30 рдШрдгреНрдЯрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред
Vnukovo рдПрдпрд░рдкреЛрд░реНрдЯрдорд╛ ATIS рд╕рдЮреНрдЪрд╛рд▓рдирдХреЛ рдЙрджрд╛рд╣рд░рдг:
VOLMET Vnukovo рдПрдпрд░рдкреЛрд░реНрдЯрдорд╛ рдХрд╕рд░реА рдХрд╛рдо рдЧрд░реНрджрдЫ рднрдиреНрдиреЗ рдЙрджрд╛рд╣рд░рдг
рд╕рдореНрдмрдиреНрдзрд┐рдд рджрд╛рдпрд░рд╛рдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкрдЯрдХ рд░реЗрдбрд┐рдпреЛ рд╕реНрдХреНрдпрд╛рдирд░ рд╡рд╛ рдЯреНрд░рд╛рдиреНрд╕реАрднрд░ рдмреЛрдХреНрди рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЫ, рд░ рдо рдЯреЗрд▓реАрдЧреНрд░рд╛рдордорд╛ рдПрдЙрдЯрд╛ рдмреЛрдЯ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдереЗрдВ рдЬреБрди рдмрдЯрдирдХреЛ рдХреНрд▓рд┐рдХрдорд╛, рддрдкрд╛рдИрдВрд▓рд╛рдИ рдЙрд╣реА рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рдпрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдЫреБрдЯреНрдЯреИ рд╕рд░реНрднрд░ рдЖрд╡рдВрдЯрд┐рдд рдЧрд░реНрди, рд╕рд╛рдереИ рддрдкрд╛рдИрдВрдХреЛ рдШрд░ рд░рд╛рд╕реНрдкрдмреЗрд░реАрдорд╛ рдЕрдиреБрд░реЛрдзрд╣рд░реВ рдкрдард╛рдЙрди рдХрдореНрддрд┐рдорд╛ рдЕрд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЫред
рддреНрдпрд╕рдХрд╛рд░рдг, рдореИрд▓реЗ рд╕реЗрд╡рд╛рд▓рд╛рдИ рдмреНрдпрд╛рдХрдЗрдиреНрдбрдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реЗрдВ
рдмреНрдпрд╛рдХрдПрдиреНрдб рддрдпрд╛рд░реА
рдПрдХ рдкреНрд░рдХрд╛рд░реНрдп рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН
рдирд┐рдпрдиреНрддреНрд░рдг рдкреНрдпрд╛рдирд▓ рдорд╛
рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рд┐рд░реНрдЬрдирд╛ рднрдПрдкрдЫрд┐, рдЦрдгреНрдбрдорд╛ рдЬрд╛рдиреБрд╣реЛрд╕реН рдХрд╛рд░реНрдпрд╣рд░реВ:
рдмрдЯрди рдерд┐рдЪреНрдиреБрд╣реЛрд╕реН рдПрдХ рдкреНрд░рдХрд╛рд░реНрдп рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рдпрд╕рд▓рд╛рдИ рдЗрдЪреНрдЫрд┐рдд рдирд╛рдо рджрд┐рдиреБрд╣реЛрд╕реН:
рджрдмрд╛рдП рдкрдЫрд┐ рдПрдХ рдкреНрд░рдХрд╛рд░реНрдп рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд╣рд╛рдореАрд╕рдБрдЧ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдкреНрд░рдХрд╛рд░реНрдпрдХреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реБрдиреЗрдЫ:
рддрдкрд╛рдИрдВрд▓реЗ рдкрд╛рдЗрдердирдорд╛ рдХреЛрдб рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕реБрд░реБ рдЧрд░реНрдиреБ рдЕрдШрд┐, рддрдкрд╛рдИрдВрд▓реЗ рдЯреЗрд▓рд┐рдЧреНрд░рд╛рдордорд╛ рдмреЛрдЯ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрдкрд░реНрдиреЗрдЫред рдо рдпреЛ рдХрд╕рд░реА рдЧрд░рд┐рдиреНрдЫ рднрдиреЗрд░ рд╡рд░реНрдгрди рдЧрд░реНрджрд┐рди - рддреНрдпрд╣рд╛рдБ рд╡рд┐рд╕реНрддреГрдд рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рдЫрдиреН
рдХреЛрдб рддрдпрд╛рд░ рдЧрд░реНрджреИ
рдореИрд▓реЗ рднрд░рдкрд░реНрджреЛ рдбрд╛рдЯрд╛рдХреЛ рд╕реНрд░реЛрддрдХреЛ рд░реВрдкрдорд╛ рд░рд╛рд╖реНрдЯреНрд░рд┐рдп рд╕рдореБрджреНрд░реА рд░ рд╡рд╛рдпреБрдордгреНрдбрд▓реАрдп рдкреНрд░рд╢рд╛рд╕рди (NOAA) рд░реЛрдЬреЗрдХреЛ рдЫреБред рдпреЛ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдПрдЬреЗрдиреНрд╕реАрд▓реЗ TXT рдврд╛рдБрдЪрд╛рдорд╛ рдпрд╕рдХреЛ рд╕рд░реНрднрд░рдорд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордпрдорд╛ рдбрд╛рдЯрд╛ рдЕрдкрдбреЗрдЯ рдЧрд░реНрджрдЫред
METAR рдбрд╛рдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд▓рд┐рдЩреНрдХ (рдХреЗрд╕ рдиреЛрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН):
https://tgftp.nws.noaa.gov/data/observations/metar/stations/<╨║╨╛╨┤ ╨░╤Н╤А╨╛╨┐╨╛╤А╤В╨░ ╨┐╨╛ ICAO>.TXT
рдореЗрд░реЛ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдирд┐рдХрдЯрддрдо рдПрдпрд░рдкреЛрд░реНрдЯ Vnukovo рд╣реЛ, рдпрд╕рдХреЛ ICAO рдХреЛрдб рд╣реЛ UUWWред рдЙрддреНрдкрдиреНрди URL рдорд╛ рдЬрд╛рдБрджрд╛ рдирд┐рдореНрди рджрд┐рдиреНрдЫ:
2020/08/10 11:30
UUWW 101130Z 31004MPS 9999 SCT048 24/13 Q1014 R01/000070 NOSIG
рдкрд╣рд┐рд▓реЛ рд░реЗрдЦрд╛ рдЧреНрд░реАрдирд╡рд┐рдЪ рдореАрди рдЯрд╛рдЗрдордорд╛ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рдирдХреЛ рд╡рд░реНрддрдорд╛рди рд╕рдордп рд╣реЛред рджреЛрд╕реНрд░реЛ рд░реЗрдЦрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореМрд╕рдордХреЛ рд╕рд╛рд░рд╛рдВрд╢ рд╣реЛред рдирд╛рдЧрд░рд┐рдХ рдЙрдбреНрдбрдпрди рдкрд╛рдЗрд▓рдЯрд╣рд░реВрд▓рд╛рдИ рдпреЛ рд░реЗрдЦрд╛рдХреЛ рдЕрд░реНрде рдмреБрдЭреНрди рдХреБрдиреИ рд╕рдорд╕реНрдпрд╛ рд╣реБрдиреЗрдЫреИрди, рддрд░ рд╣рд╛рдореАрд▓рд╛рдИ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдЪрд╛рд╣рд┐рдиреНрдЫ:
- [UUWW] - Vnukovo, рдорд╕реНрдХреЛ (рд░реВрд╕ - RU);
- [реирежрелZ] тАФ рдорд╣рд┐рдирд╛рдХреЛ 10 рдФрдВ рджрд┐рди, 11:30 рдмрдЬреЗ GMT;
- [рейрезрежрежрекрдПрдордкреАрдПрд╕] - рд╣рд╛рд╡рд╛ рджрд┐рд╢рд╛ 310 рдбрд┐рдЧреНрд░реА, рдЧрддрд┐ 4 m/s;
- [9999] - рддреЗрд░реНрд╕реЛ рджреГрд╢реНрдпрддрд╛ 10 рдХрд┐рдореА рд╡рд╛ рдмрдвреА;
- [SCT048] - 4800 рдлреАрдЯ (~ 1584 рдореАрдЯрд░) рдорд╛ рдЫрд░рд┐рдПрдХрд╛/рдЫрд░рд┐рдПрдХрд╛ рдмрд╛рджрд▓рд╣рд░реВ;
- [рез/реи] - рддрд╛рдкрдорд╛рди 24 рдбрд┐рдЧреНрд░реА рд╕реЗрд▓реНрд╕рд┐рдпрд╕, рдУрд╕ рдмрд┐рдиреНрджреБ 13 рдбрд┐рдЧреНрд░реА рд╕реЗрд▓реНрд╕рд┐рдпрд╕;
- [рдкреНрд░ рез] тАФ рджрдмрд╛рд╡ (QNH) 1014 рд╣реЗрдХреНрдЯреЛрдкрд╛рд╕реНрдХрд▓ (750 mm Hg);
- [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
рдЕрдШрд┐рд▓реНрд▓реЛ рдЙрджрд╛рд╣рд░рдгрдорд╛ рдЬрд╕реНрддреИ, 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
рд╣рд╛рдореАрд▓рд╛рдИ рд╡рд┐рд╢реЗрд╖ рдЧрд░реА рд░реЗрдЦрд╛рд╣рд░реВрдорд╛ рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдЯреЗрдореНрдкреЛ ╨╕ BECMGред TEMPO рднрдиреЗрдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЕрд╡рдзрд┐рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореМрд╕рдо рдЖрд╡рдзрд┐рдХ рд░реВрдкрдорд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдиреЗрдЫред BECMG - рдореМрд╕рдо рдмрд┐рд╕реНрддрд╛рд░реИ рд╕рдордп рдХреЛ рдПрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЕрд╡рдзрд┐ рднрд┐рддреНрд░ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдиреЗрдЫред
рддреНрдпреЛ рд╣реЛ, рд░реЗрдЦрд╛:
TEMPO 1012/1020 -TSRA BKN020CB
рдорддрд▓рдм рд╣реБрдиреЗрдЫ:
- [рез/реи] - 12 рд░ 20 рдШрдгреНрдЯрд╛ рдмреАрдЪ (рдЧреНрд░реАрдирд╡рд┐рдЪ рдореАрди рдЯрд╛рдЗрдо);
- [-TSRA] - рдЧрд░реНрдЬрди (рдЯреАрдПрд╕ = рдЧрд░реНрдЬрди) рд╡рд░реНрд╖рд╛ (RA = рд╡рд░реНрд╖рд╛) рдХреЛ рд╕рд╛рде рдХрдо рддреАрд╡реНрд░рддрд╛ (рдорд╛рдЗрдирд╕ рдЪрд┐рдиреНрд╣);
- [BKN020CB] - рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг (BKN = рднрд╛рдБрдЪрд┐рдПрдХреЛ), cumulonimbus (CB = cumulonimbus) рд╕рдореБрджреНрд░ рд╕рддрд╣ рдорд╛рдерд┐ 2000 рдлреАрдЯ (610 рдорд┐рдЯрд░) рдорд╛ рдмрд╛рджрд▓ред
рддреНрдпрд╣рд╛рдБ рдореМрд╕рдо рдШрдЯрдирд╛ рдХреЛ рд▓рд╛рдЧреА рдзреЗрд░реИ рд╕рд░реНрддрд╣рд░реВ рдЫрдиреН, рд░ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рд╕рдореНрдЭрдирд╛ рдЧрд╛рд╣реНрд░реЛ рдЫред TAF рдЕрдиреБрд░реЛрдзрдХреЛ рд▓рд╛рдЧрд┐ рдХреЛрдб рд╕рдорд╛рди рд░реВрдкрдорд╛ рд▓реЗрдЦрд┐рдПрдХреЛ рдЫред
рдХреНрд▓рд╛рдЙрдбрдорд╛ рдХреЛрдб рдЕрдкрд▓реЛрдб рдЧрд░реНрджреИ
рд╕рдордп рдмрд░реНрдмрд╛рдж рдирдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореНрд░реЛ рднрдгреНрдбрд╛рд░рдмрд╛рдЯ рдЯреЗрд▓рд┐рдЧреНрд░рд╛рдо рдмреЛрдЯ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд▓рд┐рдиреБрд╣реЛрд╕реН
рдХреЛрдбрдорд╛ рд╣рд╛рдореА рдореЛрдбреНрдпреБрд▓ рдкрд╣реБрдБрдЪ рдЧрд░реНрдиреЗрдЫреМрдВ pytaf, рддреНрдпрд╕рдкрдЫрд┐ рдпрд╕рдХреЛ рд╕рдВрд╕реНрдХрд░рдг рддреБрд░реБрдиреНрддреИ рдердкрд┐рдиреБрдкрд░реНрдЫ conditions.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 рдЕрднрд┐рд▓реЗрдЦрдорд╛ рдкреНрдпрд╛рдХ рдЧрд░реНрдЫреМрдВ рд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдкреНрд░рдХрд╛рд░реНрдпрдорд╛ рдирд┐рдпрдиреНрддреНрд░рдг рдкреНрдпрд╛рдирд▓рдорд╛ рдЬрд╛рдиреНрдЫреМрдВред
- Push рд╕рдореНрдкрд╛рджрди рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рдХреЛрдб рд╕рдВрдЧ рдЕрднрд┐рд▓реЗрдЦ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрдиреБрд╣реЛрд╕реНред
- рдлрд╛рдЗрд▓рдорд╛ рд╕рд╛рдкреЗрдХреНрд╖ рдорд╛рд░реНрдЧ рднрд░реНрдиреБрд╣реЛрд╕реН tele_bot (рд╡рд┐рд╕реНрддрд╛рд░ .py рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рд╕рдХрд┐рдБрджреИрди) рд░ рдПрдЙрдЯрд╛ рдЕрдиреНрддреНрдп рдмрд┐рдиреНрджреБ рдкреНрд░рдХрд╛рд░реНрдп (рдЙрджрд╛рд╣рд░рдгрдорд╛ рдпреЛ рджрд┐рдЗрдПрдХреЛ рдЫ рдореБрдЦреНрдп).
- рдЦрдгреНрдб рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░ рдПрдХ рдЪрд░ рд▓реЗрдЦреНрдиреБрд╣реЛрд╕реН рдЯреЛрдХрди рд░ рдпрд╕рд▓рд╛рдИ рдЗрдЪреНрдЫрд┐рдд рдЯреЗрд▓рд┐рдЧреНрд░рд╛рдо рдмреЛрдЯрдХреЛ рдЯреЛрдХрди рдЕрд╕рд╛рдЗрди рдЧрд░реНрдиреБрд╣реЛрд╕реНред
- Push рдмрдЪрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рд╡рд┐рд╕реНрддрд╛рд░ рдЧрд░реНрдиреБрд╣реЛрд╕реН, рдЬрд╕ рдкрдЫрд┐ рд╣рд╛рдореА рдЦрдгреНрдбрдорд╛ рдЬрд╛рдиреНрдЫреМрдВ рдЯреНрд░рд┐рдЧрд░ рдЧрд░реНрджрдЫ.
- рд╣рд╛рдореАрд▓реЗ рд╕реНрд╡рд┐рдЪ рд░рд╛рдЦреНрдпреМрдВ HTTP рдЕрдиреБрд░реЛрдзрдЕрдиреБрд░реЛрдз рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЧрд░реНрдиред
рд╣рд╛рдореАрд╕рдБрдЧ рдЕрдм рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдкрдорд╛ рдкреНрд░рдХрд╛рд░реНрдп рдХрд▓ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ URL рдЫред рдпрддрд┐ рдорд╛рддреНрд░ рдмрд╛рдБрдХреА рдЫ
/setwebhook <you bot token> <public URL of your function>
рдкрд░рд┐рдгрд╛рдо
рдпрджрд┐ рд╕рдмреИ рдХреБрд░рд╛ рд╕рд╣реА рддрд░рд┐рдХрд╛рд▓реЗ рдЧрд░рд┐рдпреЛ рднрдиреЗ, рддрдкрд╛рдИрдВрдХреЛ рдмреЛрдЯрд▓реЗ рддреБрд░реБрдиреНрддреИ рдХрд╛рдо рдЧрд░реНрди рдерд╛рд▓реНрдиреЗрдЫ рд░ рдирд╡реАрдирддрдо рдЙрдбреНрдбрдпрди рдореМрд╕рдо рд░рд┐рдкреЛрд░реНрдЯ рд╕рд┐рдзреИ рдореЗрд╕реЗрдиреНрдЬрд░рдорд╛ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрдиреЗрдЫред
рдирд┐рд╕реНрд╕рдиреНрджреЗрд╣, рдХреЛрдб рд╕реБрдзрд╛рд░ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рддрд░ рдпрд╕рдХреЛ рд╣рд╛рд▓рдХреЛ рдЕрд╡рд╕реНрдерд╛рдорд╛ рдкрдирд┐ рдпреЛ рдПрдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╕реНрд░реЛрддрдмрд╛рдЯ рд╕рдмреИрднрдиреНрджрд╛ рд╕рд╣реА рдореМрд╕рдо рд░ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрди рдкрд░реНрдпрд╛рдкреНрдд рдЫред
рддрдкрд╛рдИрдВрд▓реЗ рд╣рд╛рдореНрд░реЛ рдХреЛрдбрдХреЛ рдкреВрд░реНрдг рд╕рдВрд╕реНрдХрд░рдг рдкрд╛рдЙрдиреБрд╣реБрдиреЗрдЫ
рд╕реНрд░реЛрдд: www.habr.com