рд╕рдмрд╕реЗ рд╕рдЯреАрдХ рдореМрд╕рдо рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди: рдХреНрд▓рд╛рдЙрдб рдлрд╝рдВрдХреНрд╢рдВрд╕ рдкрд░ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЙрдЯ

рд╕рдмрд╕реЗ рд╕рдЯреАрдХ рдореМрд╕рдо рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди: рдХреНрд▓рд╛рдЙрдб рдлрд╝рдВрдХреНрд╢рдВрд╕ рдкрд░ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЙрдЯ
рдРрд╕реА рдмрд╣реБрдд рд╕реА рд╕реЗрд╡рд╛рдПрдБ рд╣реИрдВ рдЬреЛ рдореМрд╕рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрд┐рд╕ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░реЗрдВ? рдЬрдм рдореИрдВрдиреЗ рдЕрдХреНрд╕рд░ рдмрд╛рдЗрдХ рдЪрд▓рд╛рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рддреЛ рдореИрдВ рдЙрд╕ рд╕реНрдерд╛рди рдХреЗ рдореМрд╕рдо рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдмрд╕реЗ рд╕рдЯреАрдХ рдЬрд╛рдирдХрд╛рд░реА рдЪрд╛рд╣рддрд╛ рдерд╛ рдЬрд╣рд╛рдВ рдореИрдВ рд╕рд╡рд╛рд░реА рдХрд░рддрд╛ рд╣реВрдВред

рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рд╡рд┐рдЪрд╛рд░ рд╕реЗрдВрд╕рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдЫреЛрдЯрд╛ DIY рдореМрд╕рдо рд╕реНрдЯреЗрд╢рди рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рдФрд░ рдЙрд╕рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ "рдкрд╣рд┐рдпреЗ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛" рдФрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдбреЗрдЯрд╛ рдХреЗ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдирд╛рдЧрд░рд┐рдХ рдЙрдбреНрдбрдпрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдореМрд╕рдо рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЪреБрдирд╛, рдЕрд░реНрдерд╛рддреН METAR (рдореМрд╕рдо рд╡рд┐рдЬреНрдЮрд╛рди рд╣рд╡рд╛рдИ рдЕрдбреНрдбрд╛ рд░рд┐рдкреЛрд░реНрдЯ) рдФрд░ TAF (рдЯреАрдПрдПрдл - рдЯрд░реНрдорд┐рдирд▓ рд╣рд╡рд╛рдИ рдЕрдбреНрдбрд╛ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди)ред рд╡рд┐рдорд╛рдирди рдореЗрдВ, рд╕реИрдХрдбрд╝реЛрдВ рд▓реЛрдЧреЛрдВ рдХрд╛ рдЬреАрд╡рди рдореМрд╕рдо рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдпрдерд╛рд╕рдВрднрд╡ рд╕рдЯреАрдХ рд╣реЛрддреЗ рд╣реИрдВред

рдпрд╣ рд╕реВрдЪрдирд╛ рдкреНрд░рддреНрдпреЗрдХ рдЖрдзреБрдирд┐рдХ рд╣рд╡рд╛рдИ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЖрд╡рд╛рдЬ рджреНрд╡рд╛рд░рд╛ рдЪреМрдмреАрд╕реЛрдВ рдШрдВрдЯреЗ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ рдПрдЯреАрдЖрдИ (рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЯрд░реНрдорд┐рдирд▓ рд╕реВрдЪрдирд╛ рд╕реЗрд╡рд╛) рдФрд░ рд╡реЛрд▓реНрдореЗрдЯ (рдлреНрд░реЗрдВрдЪ рд╕реЗ рд╡реЙрд▓ - рдЙрдбрд╝рд╛рди рдФрд░ рдореМрд╕рдо - рдореМрд╕рдо)ред рдкрд╣рд▓рд╛ рд╣рд╡рд╛рдИ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореМрд╕рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ - рдЕрдЧрд▓реЗ 24-30 рдШрдВрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди, рди рдХреЗрд╡рд▓ рдкреНрд░рд╕рд╛рд░рдг рд╣рд╡рд╛рдИ рдХреНрд╖реЗрддреНрд░ рдкрд░, рдмрд▓реНрдХрд┐ рдЕрдиреНрдп рдкрд░ рднреАред

рд╡рдиреБрдХреЛрд╡реЛ рд╣рд╡рд╛рдИ рдЕрдбреНрдбреЗ рдкрд░ рдПрдЯреАрдЖрдИрдПрд╕ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:

рд╡рдиреБрдХреЛрд╡реЛ рд╣рд╡рд╛рдИ рдЕрдбреНрдбреЗ рдкрд░ VOLMET рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг

рд╣рд░ рдмрд╛рд░ рд░реЗрдбрд┐рдпреЛ рд╕реНрдХреИрдирд░ рдпрд╛ рдЯреНрд░рд╛рдВрд╕реАрд╡рд░ рдХреЛ рдЕрдкрдиреЗ рд╕рд╛рде рдЙрдЪрд┐рдд рд╕реАрдорд╛ рддрдХ рд▓реЗ рдЬрд╛рдирд╛ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдореИрдВ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдореЗрдВ рдПрдХ рдмреЙрдЯ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЬреЛ рдПрдХ рдмрдЯрди рдХреЗ рд╕реНрдкрд░реНрд╢ рдкрд░ рдЖрдкрдХреЛ рд╡рд╣реА рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд╕рд░реНрд╡рд░ рд╕рдорд░реНрдкрд┐рдд рдХрд░рдирд╛ рдХрдо рд╕реЗ рдХрдо рдЕрд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реИ, рд╕рд╛рде рд╣реА рд╣реЛрдо рд░рд╛рд╕реНрдкрдмреЗрд░реА рдХреЛ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдирд╛ рднреАред

рдЗрд╕рд▓рд┐рдП, рдмреИрдХрдПрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рд╕реЗрд▓реЗрдХреНрдЯреЗрд▓ рдХреНрд▓рд╛рдЙрдб рдлрд╝рдВрдХреНрд╢рдВрд╕. рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдирдЧрдгреНрдп рд╣реЛрдЧреА, рдЗрд╕рд▓рд┐рдП рдРрд╕реА рд╕реЗрд╡рд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрдлрд╝реНрдд рд╣реЛрдЧреА (рдореЗрд░реА рдЧрдгрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, 22 рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ 100 рд░реВрдмрд▓ рд╣реЛрдЧреА)ред

рдмреИрдХрдПрдВрдб рддреИрдпрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ

рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдирд╛

рдирд┐рдпрдВрддреНрд░рдг рдХрдХреНрд╖ рдореЗрдВ my.selectel.ru рдЦреБрд▓рд╛ рджреГрд╢реНрдп рдмрд╛рджрд▓ рдордВрдЪ рдФрд░ рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ:

рд╕рдмрд╕реЗ рд╕рдЯреАрдХ рдореМрд╕рдо рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди: рдХреНрд▓рд╛рдЙрдб рдлрд╝рдВрдХреНрд╢рдВрд╕ рдкрд░ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЙрдЯ
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗрдХреНрд╢рди рдореЗрдВ рдЬрд╛рдПрдВ рдХрд╛рд░реНрдп:

рд╕рдмрд╕реЗ рд╕рдЯреАрдХ рдореМрд╕рдо рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди: рдХреНрд▓рд╛рдЙрдб рдлрд╝рдВрдХреНрд╢рдВрд╕ рдкрд░ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЙрдЯ
рдмрдЯрди рдкреБрд╢ рдХрд░реЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рдирд╛рдо рджреЗрдВ:

рд╕рдмрд╕реЗ рд╕рдЯреАрдХ рдореМрд╕рдо рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди: рдХреНрд▓рд╛рдЙрдб рдлрд╝рдВрдХреНрд╢рдВрд╕ рдкрд░ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЙрдЯ
рджрдмрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рд░реНрдорд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реЛрдЧрд╛:

рд╕рдмрд╕реЗ рд╕рдЯреАрдХ рдореМрд╕рдо рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди: рдХреНрд▓рд╛рдЙрдб рдлрд╝рдВрдХреНрд╢рдВрд╕ рдкрд░ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЙрдЯ
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рдкрд╛рдпрдерди рдХреЛрдб рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ, рдЖрдкрдХреЛ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдореЗрдВ рдПрдХ рдмреЙрдЯ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╡рд┐рд╕реНрддреГрдд рдирд┐рд░реНрджреЗрд╢ рд╣реИрдВ рд╣рдорд╛рд░реЗ рдЬреНрдЮрд╛рдирдХреЛрд╖ рдореЗрдВ. рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдореБрдЦреНрдп рдЪреАрдЬрд╝ рдирд┐рд░реНрдорд┐рдд рдмреЙрдЯ рдХрд╛ рдЯреЛрдХрди рд╣реИред

рдЦрд╛рдирд╛ рдкрдХрд╛рдиреЗ рдХрд╛ рдХреЛрдб

рдореИрдВрдиреЗ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рдХреЗ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рд░рд╛рд╖реНрдЯреНрд░реАрдп рд╕рдореБрджреНрд░реА рдФрд░ рд╡рд╛рдпреБрдордВрдбрд▓реАрдп рдкреНрд░рд╢рд╛рд╕рди (рдПрдирдУрдПрдП) рдХреЛ рдЪреБрдирд╛ред рдпрд╣ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдПрдЬреЗрдВрд╕реА рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдкрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ TXT рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдХрд░рддреА рд╣реИред

METAR рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ (рд░рдЬрд┐рд╕реНрдЯрд░ рдиреЛрдЯ рдХрд░реЗрдВ):

https://tgftp.nws.noaa.gov/data/observations/metar/stations/<╨║╨╛╨┤ ╨░╤Н╤А╨╛╨┐╨╛╤А╤В╨░ ╨┐╨╛ ICAO>.TXT

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдирд┐рдХрдЯрддрдо рд╣рд╡рд╛рдИ рдЕрдбреНрдбрд╛ рд╡рдиреБрдХреЛрд╡реЛ рд╣реИ, рдЗрд╕рдХрд╛ рдЖрдИрд╕реАрдПрдУ рдХреЛрдб рд╣реИ рдЙрдЙрдЙрдЙрдЙ. рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдпреВрдЖрд░рдПрд▓ рдкрд░ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрддреНрдкрдиреНрди рд╣реЛрдЧрд╛:

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

рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдХреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдХрд╛ GMT рд╕рдордп рд╣реИред рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореМрд╕рдо рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢ рд╣реИред рдирд╛рдЧрд░рд┐рдХ рдЙрдбреНрдбрдпрди рдкрд╛рдпрд▓рдЯреЛрдВ рдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА рдХрд┐ рдЗрд╕ рдкрдВрдХреНрддрд┐ рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдПрдХ рдкреНрд░рддрд┐рд▓реЗрдЦ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  • [UUWW] - рд╡рдиреБрдХреЛрд╡реЛ, рдореЙрд╕реНрдХреЛ (рд░реВрд╕ - рдЖрд░рдпреВ);
  • [101130рдЬреЗрдб] - рдорд╣реАрдиреЗ рдХрд╛ 10рд╡рд╛рдВ рджрд┐рди, 11:30 GMT;
  • [31004рдПрдордкреАрдПрд╕] - рд╣рд╡рд╛ рдХреА рджрд┐рд╢рд╛ 310 рдбрд┐рдЧреНрд░реА, рдЧрддрд┐ 4 рдореАрдЯрд░/рд╕реЗрдХреЗрдВрдб;
  • [9999] - 10 рдХрд┐рдореА рдпрд╛ рдЕрдзрд┐рдХ рдХреА рдХреНрд╖реИрддрд┐рдЬ рджреГрд╢реНрдпрддрд╛;
  • [рдПрд╕рд╕реАрдЯреА048] - 4800 рдлреАрдЯ (~1584 рдореАрдЯрд░) рдкрд░ рдмрд┐рдЦрд░реЗ/рдмрд┐рдЦрд░реЗ рд╣реБрдП рдмрд╛рджрд▓;
  • [24 / 13] - рддрд╛рдкрдорд╛рди 24┬░C, рдУрд╕ рдмрд┐рдВрджреБ 13┬░C;
  • [Q1014] - рджрдмрд╛рд╡ (рдХреНрдпреВрдПрдирдПрдЪ) 1014 рд╣реЗрдХреНрдЯреЛрдкрд╛рд╕реНрдХрд▓ (750 рдорд┐рдореА рдПрдЪрдЬреА);
  • [рдЖрд░01/000070] тАФ рд▓реЗрди 01 рдкрд░ рдЖрд╕рдВрдЬрди рдЧреБрдгрд╛рдВрдХ тАФ 0,70;
  • [рдПрдирдУрдПрд╕рдЖрдИрдЬреА] - рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд┐рдирд╛.

рдЖрдЗрдП рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд╛ рдЕрдиреБрд░реЛрдз ╨╕ 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()

рдЖрдЗрдП рдЯреАрдПрдПрдл рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ (рдорд╛рдорд▓рд╛ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ)ред

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 ╨╕ рдмреАрдИрд╕реАрдПрдордЬреА. рдЯреЗрдореНрдкреЛ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЕрд╡рдзрд┐ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореМрд╕рдо рд╕рдордп-рд╕рдордп рдкрд░ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред рдмреАрдИрд╕реАрдПрдордЬреА - рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рдкрд░ рдореМрд╕рдо рдзреАрд░реЗ-рдзреАрд░реЗ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред

рд╡рд╣ рдкрдВрдХреНрддрд┐ рд╣реИ:

TEMPO 1012/1020 -TSRA BKN020CB

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реЛрдЧрд╛:

  • [1012 / 1020] - 12 рд╕реЗ 20 рдШрдВрдЯреЗ рдХреА рдЕрд╡рдзрд┐ рдореЗрдВ (рдЧреНрд░реАрдирд╡рд┐рдЪ рдореАрди рдЯрд╛рдЗрдо);
  • [-рдЯреАрдПрд╕рдЖрд░рдП] - рдХрдо рддреАрд╡реНрд░рддрд╛ (рдорд╛рдЗрдирд╕ рд╕рд╛рдЗрди) рдХреА рдмрд╛рд░рд┐рд╢ (рдЖрд░рдП = рдмрд╛рд░рд┐рд╢) рдХреЗ рд╕рд╛рде рдЖрдВрдзреА (рдЯреАрдПрд╕ = рддреВрдлрд╛рди);
  • [BKN020CB] - рд╕рдореБрджреНрд░ рддрд▓ рд╕реЗ 2000 рдлреАрдЯ (610 рдореАрдЯрд░) рдХреА рдКрдВрдЪрд╛рдИ рдкрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг (рдмреАрдХреЗрдПрди = рдЯреВрдЯрд╛ рд╣реБрдЖ), рдХреНрдпреВрдореНрдпрд▓реЛрдирд┐рдореНрдмрд╕ (рд╕реАрдмреА = рдХреНрдпреВрдореНрдпрд▓реЛрдирд┐рдореНрдмрд╕) рдмрд╛рджрд▓ рдЖрд╡рд░рдгред

рдРрд╕реЗ рдмрд╣реБрдд рд╕реЗ рд╢рдмреНрдж рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЕрд░реНрде рдореМрд╕рдо рд╕рдВрдмрдВрдзреА рдШрдЯрдирд╛рдПрдБ рд╣реИрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдпрд╛рдж рд░рдЦрдирд╛ рдХрдард┐рди рд╣реИред TAF рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЗрд╕реА рдкреНрд░рдХрд╛рд░ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдХреНрд▓рд╛рдЙрдб рдкрд░ рдХреЛрдб рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ

рд╕рдордп рдмрд░реНрдмрд╛рдж рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдЕрдкрдиреЗ рднрдВрдбрд╛рд░ рд╕реЗ рдПрдХ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯ рдЯреЗрдореНрдкрд▓реЗрдЯ рд▓реЗрдВ рдХреНрд▓рд╛рдЙрдб-рдЯреЗрд▓реАрдЧреНрд░рд╛рдо-рдмреЙрдЯ. рд╡рд╣рд╛рдВ рдкрд╣рд▓реЗ рд╕реЗ рддреИрдпрд╛рд░реА рд╣реИ requirements.txt ╨╕ setup.py рд╕рд╣реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде.

рдЪреВрдБрдХрд┐ рдХреЛрдб рдореЗрдВ рд╣рдо рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реЗрдВрдЧреЗ pytaf, рддреЛ рдЗрд╕рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рддреБрд░рдВрдд рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП requirements.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)

  • рд╣рдо рд╕рдВрдкреВрд░реНрдг рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдПрдХ рдЬрд╝рд┐рдк рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдкреИрдХ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдмрдирд╛рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдХрдХреНрд╖ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВред
  • рдХреНрд▓рд┐рдХ рд╕рдВрдкрд╛рджрд┐рдд рдФрд░ рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред

рд╕рдмрд╕реЗ рд╕рдЯреАрдХ рдореМрд╕рдо рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди: рдХреНрд▓рд╛рдЙрдб рдлрд╝рдВрдХреНрд╢рдВрд╕ рдкрд░ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЙрдЯ

  • рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдкрде рднрд░реЗрдВ рдЯреЗрд▓реА_рдмреЙрдЯ (рд╡рд┐рд╕реНрддрд╛рд░ .py рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ) рдФрд░ рдПрдХ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдлрд╝рдВрдХреНрд╢рди (рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрд╣ рдореБрдЦреНрдп).
  • рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдПрдХ рд╡реЗрд░рд┐рдПрдмрд▓ рд▓рд┐рдЦреЗрдВ рдЯреЛрдХрди рдФрд░ рдЗрд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯ рдХрд╛ рдЯреЛрдХрди рдкреНрд░рджрд╛рди рдХрд░реЗрдВред
  • рдХреНрд▓рд┐рдХ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рд╡рд┐рд╕реНрддреГрдд рдХрд░реЗрдВ, рдлрд┐рд░ рдЕрдиреБрднрд╛рдЧ рдкрд░ рдЬрд╛рдПрдБ рдЯреНрд░рд┐рдЧрд░реНрд╕.
  • рд╣рдордиреЗ рд╕реНрд╡рд┐рдЪ рд▓рдЧрд╛ рджрд┐рдпрд╛ HTTP рдЕрдиреБрд░реЛрдзрдЕрдиреБрд░реЛрдз рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП.

рд╕рдмрд╕реЗ рд╕рдЯреАрдХ рдореМрд╕рдо рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди: рдХреНрд▓рд╛рдЙрдб рдлрд╝рдВрдХреНрд╢рдВрд╕ рдкрд░ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЙрдЯ
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдпреВрдЖрд░рдПрд▓ рд╣реИред рдмрд╕ рдпрд╣реА рдмрд╛рдХреА рд╣реИ рдПрдХ рд╡реЗрдмрд╣реБрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ. рд╣рдорд╛рд░рд╛ рдмреЙрдЯ рдвреВрдВрдвреЗрдВ @SelectelServerless_bot рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдореЗрдВ рдФрд░ рдЕрдкрдиреЗ рдмреЙрдЯ рдХреЛ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ:

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

рдкрд░рд┐рдгрд╛рдо

рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХрд╛ рдмреЙрдЯ рддреБрд░рдВрдд рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛ рдФрд░ рд╡рд░реНрддрдорд╛рди рд╡рд┐рдорд╛рдирди рдореМрд╕рдо рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ рд╕реАрдзреЗ рдореИрд╕реЗрдВрдЬрд░ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред

рд╕рдмрд╕реЗ рд╕рдЯреАрдХ рдореМрд╕рдо рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди: рдХреНрд▓рд╛рдЙрдб рдлрд╝рдВрдХреНрд╢рдВрд╕ рдкрд░ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЙрдЯ
рдмреЗрд╢рдХ, рдХреЛрдб рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдкрдиреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдореЗрдВ рднреА рдпрд╣ рдХрд┐рд╕реА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╕реНрд░реЛрдд рд╕реЗ рд╕рдмрд╕реЗ рд╕рдЯреАрдХ рдореМрд╕рдо рдФрд░ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

рдЖрдк рд╣рдорд╛рд░реЗ рдпрд╣рд╛рдВ рдХреЛрдб рдХрд╛ рдкреВрд░реНрдг рд╕рдВрд╕реНрдХрд░рдг рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ GitHub рдкрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА.

рд╕рдмрд╕реЗ рд╕рдЯреАрдХ рдореМрд╕рдо рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди: рдХреНрд▓рд╛рдЙрдб рдлрд╝рдВрдХреНрд╢рдВрд╕ рдкрд░ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЙрдЯ

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ