рд╕рдмреИрднрдиреНрджрд╛ рд╕рдЯреАрдХ рдореМрд╕рдо рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди: рдХреНрд▓рд╛рдЙрдб рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВрдорд╛ рдЯреЗрд▓рд┐рдЧреНрд░рд╛рдордХреЛ рд▓рд╛рдЧрд┐ рдмреЛрдЯ

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

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

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

Vnukovo рдПрдпрд░рдкреЛрд░реНрдЯрдорд╛ ATIS рд╕рдЮреНрдЪрд╛рд▓рдирдХреЛ рдЙрджрд╛рд╣рд░рдг:

VOLMET Vnukovo рдПрдпрд░рдкреЛрд░реНрдЯрдорд╛ рдХрд╕рд░реА рдХрд╛рдо рдЧрд░реНрджрдЫ рднрдиреНрдиреЗ рдЙрджрд╛рд╣рд░рдг

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

рддреНрдпрд╕рдХрд╛рд░рдг, рдореИрд▓реЗ рд╕реЗрд╡рд╛рд▓рд╛рдИ рдмреНрдпрд╛рдХрдЗрдиреНрдбрдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реЗрдВ Selectel рдХреНрд▓рд╛рдЙрдб рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВред рдЕрдиреБрд░реЛрдзрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдирдЧрдгреНрдп рд╣реБрдиреЗрдЫ, рддреНрдпрд╕реИрд▓реЗ рдпрд╕реНрддреЛ рд╕реЗрд╡рд╛ рд▓рдЧрднрдЧ рдирд┐: рд╢реБрд▓реНрдХ рд╣реБрдиреЗрдЫ (рдореЗрд░реЛ рдЧрдгрдирд╛ рдЕрдиреБрд╕рд╛рд░, рдпреЛ 22 рдЕрдиреБрд░реЛрдзрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ 100 рд░реВрдмрд▓ рд╣реБрдиреЗрдЫ)ред

рдмреНрдпрд╛рдХрдПрдиреНрдб рддрдпрд╛рд░реА

рдПрдХ рдкреНрд░рдХрд╛рд░реНрдп рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН

рдирд┐рдпрдиреНрддреНрд░рдг рдкреНрдпрд╛рдирд▓ рдорд╛ my.selectel.ru рджреГрд╢реНрдп рдЦреЛрд▓реНрдиреБрд╣реЛрд╕реН рдХреНрд▓рд╛рдЙрдб рдкреНрд▓реЗрдЯрдлрд░реНрдо рд░ рдирдпрд╛рдБ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН:

рд╕рдмреИрднрдиреНрджрд╛ рд╕рдЯреАрдХ рдореМрд╕рдо рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди: рдХреНрд▓рд╛рдЙрдб рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВрдорд╛ рдЯреЗрд▓рд┐рдЧреНрд░рд╛рдордХреЛ рд▓рд╛рдЧрд┐ рдмреЛрдЯ
рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рд┐рд░реНрдЬрдирд╛ рднрдПрдкрдЫрд┐, рдЦрдгреНрдбрдорд╛ рдЬрд╛рдиреБрд╣реЛрд╕реН рдХрд╛рд░реНрдпрд╣рд░реВ:

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

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

рд╕рдмреИрднрдиреНрджрд╛ рд╕рдЯреАрдХ рдореМрд╕рдо рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди: рдХреНрд▓рд╛рдЙрдб рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВрдорд╛ рдЯреЗрд▓рд┐рдЧреНрд░рд╛рдордХреЛ рд▓рд╛рдЧрд┐ рдмреЛрдЯ
рддрдкрд╛рдИрдВрд▓реЗ рдкрд╛рдЗрдердирдорд╛ рдХреЛрдб рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕реБрд░реБ рдЧрд░реНрдиреБ рдЕрдШрд┐, рддрдкрд╛рдИрдВрд▓реЗ рдЯреЗрд▓рд┐рдЧреНрд░рд╛рдордорд╛ рдмреЛрдЯ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрдкрд░реНрдиреЗрдЫред рдо рдпреЛ рдХрд╕рд░реА рдЧрд░рд┐рдиреНрдЫ рднрдиреЗрд░ рд╡рд░реНрдгрди рдЧрд░реНрджрд┐рди - рддреНрдпрд╣рд╛рдБ рд╡рд┐рд╕реНрддреГрдд рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рдЫрдиреН рд╣рд╛рдореНрд░реЛ рдЬреНрдЮрд╛рдирдХреЛ рдЖрдзрд╛рд░рдорд╛ред рд╣рд╛рдореНрд░реЛ рд▓рд╛рдЧрд┐ рдореБрдЦреНрдп рдХреБрд░рд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдмреЛрдЯрдХреЛ рдЯреЛрдХрди рд╣реЛред

рдХреЛрдб рддрдпрд╛рд░ рдЧрд░реНрджреИ

рдореИрд▓реЗ рднрд░рдкрд░реНрджреЛ рдбрд╛рдЯрд╛рдХреЛ рд╕реНрд░реЛрддрдХреЛ рд░реВрдкрдорд╛ рд░рд╛рд╖реНрдЯреНрд░рд┐рдп рд╕рдореБрджреНрд░реА рд░ рд╡рд╛рдпреБрдордгреНрдбрд▓реАрдп рдкреНрд░рд╢рд╛рд╕рди (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 рдЕрдиреБрд░реЛрдзрдХреЛ рд▓рд╛рдЧрд┐ рдХреЛрдб рд╕рдорд╛рди рд░реВрдкрдорд╛ рд▓реЗрдЦрд┐рдПрдХреЛ рдЫред

рдХреНрд▓рд╛рдЙрдбрдорд╛ рдХреЛрдб рдЕрдкрд▓реЛрдб рдЧрд░реНрджреИ

рд╕рдордп рдмрд░реНрдмрд╛рдж рдирдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореНрд░реЛ рднрдгреНрдбрд╛рд░рдмрд╛рдЯ рдЯреЗрд▓рд┐рдЧреНрд░рд╛рдо рдмреЛрдЯ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд▓рд┐рдиреБрд╣реЛрд╕реН рдХреНрд▓рд╛рдЙрдб-рдЯреЗрд▓реАрдЧреНрд░рд╛рдо-рдмреЛрдЯред рддреНрдпрд╣рд╛рдБ рдкреВрд░реНрд╡ рддрдпрд╛рд░реА рдЫ conditions.txt ╨╕ setup.py рд╕рд╣реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рд╕рдВрдЧред

рдХреЛрдбрдорд╛ рд╣рд╛рдореА рдореЛрдбреНрдпреБрд▓ рдкрд╣реБрдБрдЪ рдЧрд░реНрдиреЗрдЫреМрдВ 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 рдЫред рдпрддрд┐ рдорд╛рддреНрд░ рдмрд╛рдБрдХреА рдЫ рд╡реЗрдмрд╣реБрдХ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рд╣рд╛рдореНрд░реЛ рдмреЛрдЯ рдЦреЛрдЬреНрдиреБрд╣реЛрд╕реН @SelectelServerless_bot Telegram рдорд╛ рд░ рдЖрджреЗрд╢ рд╕рдВрдЧ рдЖрдлреНрдиреЛ рдмреЛрдЯ рджрд░реНрддрд╛:

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

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

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

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

рддрдкрд╛рдИрдВрд▓реЗ рд╣рд╛рдореНрд░реЛ рдХреЛрдбрдХреЛ рдкреВрд░реНрдг рд╕рдВрд╕реНрдХрд░рдг рдкрд╛рдЙрдиреБрд╣реБрдиреЗрдЫ GitHub рдорд╛ рднрдгреНрдбрд╛рд░рд╣рд░реВ.

рд╕рдмреИрднрдиреНрджрд╛ рд╕рдЯреАрдХ рдореМрд╕рдо рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди: рдХреНрд▓рд╛рдЙрдб рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВрдорд╛ рдЯреЗрд▓рд┐рдЧреНрд░рд╛рдордХреЛ рд▓рд╛рдЧрд┐ рдмреЛрдЯ

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди