рд╣рд╡рд╛рдорд╛рдирд╛рдЪреА рдорд╛рд╣рд┐рддреА рджреЗрдгрд╛рд░реНтАНрдпрд╛ рдмрд░реНтАНрдпрд╛рдЪ рд╕реЗрд╡рд╛ рдЖрд╣реЗрдд, рдкрд░рдВрддреБ рддреБрдореНрд╣реА рдХреЛрдгрд╛рд╡рд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдареЗрд╡рд╛рд╡рд╛? рдЬреЗрд╡реНрд╣рд╛ рдореА рд╡рд╛рд░рдВрд╡рд╛рд░ рд╕рд╛рдпрдХрд▓ рдЪрд╛рд▓рд╡рд╛рдпрд▓рд╛ рд╕реБрд░реБрд╡рд╛рдд рдХреЗрд▓реА, рддреЗрд╡реНрд╣рд╛ рдореА рдЬреНрдпрд╛ рдард┐рдХрд╛рдгреА рд╕рд╛рдпрдХрд▓ рдЪрд╛рд▓рд╡рддреЛ рддреНрдпрд╛ рдард┐рдХрд╛рдгрдЪреНрдпрд╛ рд╣рд╡рд╛рдорд╛рдирд╛рдЪреА рд╕рд░реНрд╡рд╛рдд рдЕрдЪреВрдХ рдорд╛рд╣рд┐рддреА рдорд▓рд╛ рд╣рд╡реА рд╣реЛрддреА.
рд╕реЗрдиреНрд╕рд░реНрд╕рд╕рд╣ рдПрдХ рд▓рд╣рд╛рди DIY рд╣рд╡рд╛рдорд╛рди рд╕реНрдЯреЗрд╢рди рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдЖрдгрд┐ рддреНрдпрд╛рддреВрди рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рдорд╛рдЭрд╛ рдкрд╣рд┐рд▓рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛрддрд╛. рдкрд░рдВрддреБ рдореА "рдЪрд╛рдХ рдкреБрдиреНрд╣рд╛ рд╢реЛрдзреВрди рдХрд╛рдврд▓реЗ" рдирд╛рд╣реА рдЖрдгрд┐ рд╕рддреНрдпрд╛рдкрд┐рдд рдбреЗрдЯрд╛рдЪрд╛ рд╕реНрд░реЛрдд рдореНрд╣рдгреВрди рдирд╛рдЧрд░реА рд╡рд┐рдорд╛рди рд╡рд╛рд╣рддреВрдХ рдордзреНрдпреЗ рд╡рд╛рдкрд░рд▓реНрдпрд╛ рдЬрд╛рдгрд╛рд░реНтАНрдпрд╛ рд╣рд╡рд╛рдорд╛рди рдорд╛рд╣рд┐рддреАрдЪреА рдирд┐рд╡рдб рдХреЗрд▓реА, рдореНрд╣рдгрдЬреЗ рдореЗрдЯрд╛рд░ (Meteorological Aerodrome Report) рдЖрдгрд┐ рдЯреАрдПрдПрдл (TAF - рдЯрд░реНрдорд┐рдирд▓ рдПрд░реЛрдбреНрд░реЛрдо рдЕрдВрджрд╛рдЬ). рд╡рд┐рдорд╛рдирдЪрд╛рд▓рдирд╛рдд, рд╢реЗрдХрдбреЛ рд▓реЛрдХрд╛рдВрдЪреЗ рдЬреАрд╡рди рд╣рд╡рд╛рдорд╛рдирд╛рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕рддреЗ, рддреНрдпрд╛рдореБрд│реЗ рдЕрдВрджрд╛рдЬ рд╢рдХреНрдп рддрд┐рддрдХреЗ рдЕрдЪреВрдХ рдЕрд╕рддрд╛рдд.
рд╣реА рдорд╛рд╣рд┐рддреА рдлреЙрд░реНрдордордзреНрдпреЗ рдкреНрд░рддреНрдпреЗрдХ рдЖрдзреБрдирд┐рдХ рдПрдЕрд░рдлреАрд▓реНрдбрд╡рд░ рдЖрд╡рд╛рдЬрд╛рджреНрд╡рд╛рд░реЗ XNUMX/XNUMX рдкреНрд░рд╕рд╛рд░рд┐рдд рдХреЗрд▓реА рдЬрд╛рддреЗ рдПрдЯреАрдЖрдпрдПрд╕ (рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдЯрд░реНрдорд┐рдирд▓ рдорд╛рд╣рд┐рддреА рд╕реЗрд╡рд╛) рдЖрдгрд┐ VOLMET (рдлреНрд░реЗрдВрдЪрдордзреВрди. рдЦрдВрдб - рдлреНрд▓рд╛рдЗрдЯ рдЖрдгрд┐ m├йt├йo - рд╣рд╡рд╛рдорд╛рди). рдкрд╣рд┐рд▓рд╛ рдПрдЕрд░рдлрд┐рд▓реНрдбрд╡рд░реАрд▓ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣рд╡рд╛рдорд╛рдирд╛рд╡рд┐рд╖рдпреА рдорд╛рд╣рд┐рддреА рдкреНрд░рджрд╛рди рдХрд░рддреЛ рдЖрдгрд┐ рджреБрд╕рд░рд╛ рдкреБрдвреАрд▓ 24-30 рддрд╛рд╕рд╛рдВрдЪрд╛ рдЕрдВрджрд╛рдЬ рдкреНрд░рджрд╛рди рдХрд░рддреЛ, рдХреЗрд╡рд│ рдкреНрд░рд╕рд╛рд░рдг рдПрдЕрд░рдлрд┐рд▓реНрдбрд╡рд░рдЪ рдирд╛рд╣реА рддрд░ рдЗрддрд░рд╛рдВрд╕рд╛рдареА рджреЗрдЦреАрд▓.
Vnukovo рд╡рд┐рдорд╛рдирддрд│рд╛рд╡рд░реАрд▓ ATIS рдСрдкрд░реЗрд╢рдирдЪреЗ рдЙрджрд╛рд╣рд░рдг:
VOLMET Vnukovo рд╡рд┐рдорд╛рдирддрд│рд╛рд╡рд░ рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ рдпрд╛рдЪреЗ рдЙрджрд╛рд╣рд░рдг
рд╕рдВрдмрдВрдзрд┐рдд рд╢реНрд░реЗрдгреАрд╕рд╛рдареА рдкреНрд░рддреНрдпреЗрдХ рд╡реЗрд│реА рдЖрдкрд▓реНрдпрд╛рд╕реЛрдмрдд рд░реЗрдбрд┐рдУ рд╕реНрдХреЕрдирд░ рдХрд┐рдВрд╡рд╛ рдЯреНрд░рд╛рдиреНрд╕реАрд╡реНрд╣рд░ рдШреЗрдКрди рдЬрд╛рдгреЗ рдЧреИрд░рд╕реЛрдпреАрдЪреЗ рдЖрд╣реЗ рдЖрдгрд┐ рдорд▓рд╛ рдЯреЗрд▓реАрдЧреНрд░рд╛рдордордзреНрдпреЗ рдПрдХ рдмреЙрдЯ рддрдпрд╛рд░ рдХрд░рд╛рдпрдЪрд╛ рдЖрд╣реЗ рдЬреЛ рдПрдХрд╛ рдмрдЯрдгрд╛рдЪреНрдпрд╛ рдХреНрд▓рд┐рдХрд╡рд░, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╕рдорд╛рди рдЕрдВрджрд╛рдЬ рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрдИрд▓. рдпрд╛рд╕рд╛рдареА рд╕реНрд╡рддрдВрддреНрд░ рд╕рд░реНрд╡реНрд╣рд░ рд╡рд╛рдЯрдк рдХрд░рдгреЗ, рддрд╕реЗрдЪ рддреБрдордЪреНрдпрд╛ рдШрд░рд╛рддреАрд▓ рд░рд╛рд╕реНрдкрдмреЗрд░реАрд▓рд╛ рд╡рд┐рдирдВрддреНрдпрд╛ рдкрд╛рдард╡рдгреЗ рдХрд┐рдорд╛рди рдЕрд╡реНрдпрд╡рд╣рд╛рд░реНрдп рдЖрд╣реЗ.
рдореНрд╣рдгреВрди, рдореА рдмреЕрдХрдПрдВрдб рдореНрд╣рдгреВрди рд╕реЗрд╡рд╛ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреЗ рдард░рд╡рд┐рд▓реЗ
рдмреЕрдХрдПрдВрдбрдЪреА рддрдпрд╛рд░реА
рдПрдХ рдлрдВрдХреНрд╢рди рддрдпрд╛рд░ рдХрд░рд╛
рдирд┐рдпрдВрддреНрд░рдг рдкреЕрдиреЗрд▓рдордзреНрдпреЗ
рдкреНрд░рдХрд▓реНрдк рддрдпрд╛рд░ рдЭрд╛рд▓реНрдпрд╛рдирдВрддрд░, рд╡рд┐рднрд╛рдЧрд╛рдд рдЬрд╛ рдХрд╛рд░реНрдпреЗ:
рдмрдЯрдг рджрд╛рдмрд╛ рдПрдХ рдлрдВрдХреНрд╢рди рддрдпрд╛рд░ рдХрд░рд╛ рдЖрдгрд┐ рддреНрдпрд╛рд▓рд╛ рдЗрдЪреНрдЫрд┐рдд рдирд╛рд╡ рджреНрдпрд╛:
рджрд╛рдмрд▓реНрдпрд╛рдирдВрддрд░ рдПрдХ рдлрдВрдХреНрд╢рди рддрдпрд╛рд░ рдХрд░рд╛ рдЖрдордЪреНрдпрд╛рдХрдбреЗ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдлрдВрдХреНрд╢рдирдЪреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЕрд╕реЗрд▓:
рддреБрдореНрд╣реА Python рдордзреНрдпреЗ рдХреЛрдб рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕ рд╕реБрд░реБрд╡рд╛рдд рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА, рддреБрдореНрд╣рд╛рд▓рд╛ Telegram рдордзреНрдпреЗ рдПрдХ рдмреЙрдЯ рддрдпрд╛рд░ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рд╣реЗ рдХрд╕реЗ рдХреЗрд▓реЗ рдЬрд╛рддреЗ рддреЗ рдореА рд╡рд░реНрдгрди рдХрд░рдгрд╛рд░ рдирд╛рд╣реА - рддрдкрд╢реАрд▓рд╡рд╛рд░ рд╕реВрдЪрдирд╛ рдЖрд╣реЗрдд
рдХреЛрдб рддрдпрд╛рд░ рдХрд░рдд рдЖрд╣реЗ
рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛рдЪрд╛ рд╕реНрд░реЛрдд рдореНрд╣рдгреВрди рдореА рдиреЕрд╢рдирд▓ рдУрд╢рдирд┐рдХ рдЕрдБрдб рдЕреЕрдЯрдореЙрд╕реНрдлреЗрд░рд┐рдХ рдПрдбрдорд┐рдирд┐рд╕реНрдЯреНрд░реЗрд╢рди (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] - рд╡рдиреБрдХреЛрд╡реЛ, рдореЙрд╕реНрдХреЛ (рд░рд╢рд┐рдпрд╛ - рдЖрд░рдпреВ);
- [резрежрезрезрейрежрдЭреЗрдб] тАФ рдорд╣рд┐рдиреНрдпрд╛рдЪрд╛ 10рд╡рд╛ рджрд┐рд╡рд╕, рд╕рдХрд╛рд│реА 11:30 GMT;
- [рейрезрежрежрекрдПрдордкреАрдПрд╕] тАФ рд╡рд╛рд▒реНрдпрд╛рдЪреА рджрд┐рд╢рд╛ рейрезреж рдЕрдВрд╢, рдЧрддреА рек рдореА/рд╕реЗ;
- [9999] - рдХреНрд╖реИрддрд┐рдЬ рджреГрд╢реНрдпрдорд╛рдирддрд╛ 10 рдХрд┐рдореА рдХрд┐рдВрд╡рд╛ рдЕрдзрд┐рдХ;
- [SCT048] тАФ рекреорежреж рдлреВрдЯ (~резрелреорек рдореА) рд╡рд░ рд╡рд┐рдЦреБрд░рд▓реЗрд▓реЗ/рд╡рд┐рдЦреБрд░рд▓реЗрд▓реЗ рдврдЧ;
- [рез/реи] - рддрд╛рдкрдорд╛рди 24┬░C, рджрд╡рдмрд┐рдВрджреВ 13┬░C;
- [рдкреНрд░.резрежрезрек] тАФ рджрд╛рдм (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
рдорд╛рдЧреАрд▓ рдЙрджрд╛рд╣рд░рдгрд╛рдкреНрд░рдорд╛рдгреЗ, рд╡реНрд╣рдиреБрдХреЛрд╡реЛ рд╡рд┐рдорд╛рдирддрд│рд╛рд╡рд░реАрд▓ рдЕрдВрджрд╛рдЬ рдкрд╛рд╣реВрдпрд╛:
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. рдЯреЗрдореНрдкреЛрдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рдЖрд╣реЗ рдХреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд╛рд▓рд╛рд╡рдзреАрддреАрд▓ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣рд╡рд╛рдорд╛рди рд╡реЗрд│реЛрд╡реЗрд│реА рдмрджрд▓реЗрд▓. BECMG - рдард░рд╛рд╡рд┐рдХ рдХрд╛рд▓рд╛рд╡рдзреАрдд рд╣рд╡рд╛рдорд╛рди рд╣рд│реВрд╣рд│реВ рдмрджрд▓реЗрд▓.
рдореНрд╣рдгрдЬреЗ, рдУрд│:
TEMPO 1012/1020 -TSRA BKN020CB
рдпрд╛рдЪрд╛ рдЕрд░реНрде рд╣реЛрдИрд▓:
- [рез/реи] - 12 рддреЗ 20 рддрд╛рд╕рд╛рдВрдЪреНрдпрд╛ рджрд░рдореНрдпрд╛рди (рдЧреНрд░реАрдирд╡рд┐рдЪ рдореАрди рдЯрд╛рдЗрдо);
- [-TSRA] тАФ рдЧрдбрдЧрдбрд╛рдЯ (TS = рдЧрдбрдЧрдбрд╛рдЯреА рд╡рд╛рджрд│) рдкрд╛рдКрд╕ (RA = рдкрд╛рдКрд╕) рд╕рд╣ рдХрдореА рддреАрд╡реНрд░рддреЗрдЪрд╛ (рд╡рдЬрд╛ рдЪрд┐рдиреНрд╣);
- [BKN020CB] - рд╕рдореБрджреНрд░рд╕рдкрд╛рдЯреАрдкрд╛рд╕реВрди 2000 рдлреВрдЯ (610 рдореАрдЯрд░) рдЙрдВрдЪреАрд╡рд░ рд▓рдХреНрд╖рдгреАрдп (BKN = рддреБрдЯрд▓реЗрд▓реЗ), cumulonimbus (CB = cumulonimbus) рдврдЧ.
рд╣рд╡рд╛рдорд╛рдирд╛рдЪреНрдпрд╛ рдШрдЯрдиреЗрд╕рд╛рдареА рдмрд░реНтАНрдпрд╛рдЪ рдЕрдЯреА рдЖрд╣реЗрдд рдЖрдгрд┐ рддреНрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рдгреЗ рдХрдареАрдг рдЖрд╣реЗ. TAF рд╡рд┐рдирдВрддреАрд╕рд╛рдареА рдХреЛрдб рдЕрд╢рд╛рдЪ рдкреНрд░рдХрд╛рд░реЗ рд▓рд┐рд╣рд┐рд▓реЗрд▓рд╛ рдЖрд╣реЗ.
рдХреНрд▓рд╛рдЙрдбрд╡рд░ рдХреЛрдб рдЕрдкрд▓реЛрдб рдХрд░рдд рдЖрд╣реЗ
рд╡реЗрд│ рд╡рд╛рдпрд╛ рдШрд╛рд▓рд╡реВ рдирдпреЗ рдореНрд╣рдгреВрди, рдЖрдордЪреНрдпрд╛ рднрд╛рдВрдбрд╛рд░рд╛рддреВрди рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯ рдЯреЗрдореНрдкрд▓реЗрдЯ рдШреЗрдК
рдХреЛрдбрдордзреНрдпреЗ рдЕрд╕рд▓реНрдпрд╛рдиреЗ рдЖрдкрдг рдореЙрдбреНрдпреВрд▓рдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгрд╛рд░ рдЖрд╣реЛрдд 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)
- рдЖрдореНрд╣реА рд╕рдВрдкреВрд░реНрдг рдбрд┐рд░реЗрдХреНрдЯрд░реА рдЭрд┐рдк рдЖрд░реНрдХрд╛рдЗрд╡реНрд╣рдордзреНрдпреЗ рдкреЕрдХ рдХрд░рддреЛ рдЖрдгрд┐ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдлрдВрдХреНрд╢рдирд╡рд░ рдирд┐рдпрдВрддреНрд░рдг рдкреЕрдиреЗрд▓рд╡рд░ рдЬрд╛рддреЛ.
- рдкреБрд╢ рд╕реБрдзрд╛рд░рдгреЗ рдЖрдгрд┐ рдХреЛрдбрд╕рд╣ рд╕рдВрдЧреНрд░рд╣ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рд╛.
- рдлрд╛рдИрд▓рдордзреНрдпреЗ рд╕рдВрдмрдВрдзрд┐рдд рдорд╛рд░реНрдЧ рднрд░рд╛ tele_bot (рд╡рд┐рд╕реНрддрд╛рд░ .рдкреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реА) рдЖрдгрд┐ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдлрдВрдХреНрд╢рди (рджрд┐рд▓реЗрд▓реНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдд рд╣реЗ рдЖрд╣реЗ рдореБрдЦреНрдп).
- рд╡рд┐рднрд╛рдЧ рдкрд░реНрдпрд╛рд╡рд░рдг рдкрд░рд┐рд╡рд░реНрддрдиреЗ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рд▓рд┐рд╣рд╛ рдЯреЛрдХрди рдЖрдгрд┐ рддреНрдпрд╛рд╕ рдЗрдЪреНрдЫрд┐рдд рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯрдЪреЗ рдЯреЛрдХрди рдирд┐рдпреБрдХреНрдд рдХрд░рд╛.
- рдкреБрд╢ рдЬрддрди рдХрд░рд╛ рдЖрдгрд┐ рд╡рд┐рд╕реНрддреГрдд рдХрд░рд╛, рдЬреНрдпрд╛рдирдВрддрд░ рдЖрдореНрд╣реА рд╡рд┐рднрд╛рдЧрд╛рдд рдЬрд╛рддреЛ рдЯреНрд░рд┐рдЧрд░.
- рдЖрдореНрд╣реА рд╕реНрд╡рд┐рдЪ рдареЗрд╡рддреЛ HTTP рд╡рд┐рдирдВрддреАрд╡рд┐рдирдВрддреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА.
рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдЖрддрд╛ рдлрдВрдХреНрд╢рдирд▓рд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХрдкрдгреЗ рдХреЙрд▓ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА URL рдЖрд╣реЗ. рдмрд╛рдХреА рдЖрд╣реЗ рддреЗ
/setwebhook <you bot token> <public URL of your function>
рдкрд░рд┐рдгрд╛рдо
рд╕рд░реНрд╡рдХрд╛рд╣реА рдпреЛрдЧреНрдпрд░рд┐рддреНрдпрд╛ рдХреЗрд▓реЗ рдЕрд╕рд▓реНрдпрд╛рд╕, рддреБрдордЪрд╛ рдмреЙрдЯ рддрд╛рдмрдбрддреЛрдм рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрд▓ рдЖрдгрд┐ рдирд╡реАрдирддрдо рд╡рд┐рдорд╛рдирдЪрд╛рд▓рди рд╣рд╡рд╛рдорд╛рди рдЕрд╣рд╡рд╛рд▓ рдереЗрдЯ рдореЗрд╕реЗрдВрдЬрд░рдордзреНрдпреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрд▓.
рдЕрд░реНрдерд╛рдд, рдХреЛрдб рд╕реБрдзрд╛рд░рд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ, рдкрд░рдВрддреБ рддреНрдпрд╛рдЪреНрдпрд╛ рд╕рджреНрдп рд╕реНрдерд┐рддреАрдд рджреЗрдЦреАрд▓ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╕реНрддреНрд░реЛрддрд╛рдХрдбреВрди рд╕рд░реНрд╡рд╛рдд рдЕрдЪреВрдХ рд╣рд╡рд╛рдорд╛рди рдЖрдгрд┐ рдЕрдВрджрд╛рдЬ рд╢реЛрдзрдгреЗ рдкреБрд░реЗрд╕реЗ рдЖрд╣реЗ.
рддреБрдореНрд╣рд╛рд▓рд╛ рдЖрдордЪреНрдпрд╛ рдХреЛрдбрдЪреА рдкреВрд░реНрдг рдЖрд╡реГрддреНрддреА рдорд┐рд│реЗрд▓
рд╕реНрддреНрд░реЛрдд: www.habr.com