ډیری خدمتونه شتون لري چې د هوا معلومات چمتو کوي، مګر تاسو باید په کوم یو باور وکړئ؟ کله چې ما په مکرر ډول سایکل چلول پیل کړل، ما غوښتل د هغه ځای د هوا شرایطو په اړه دقیق معلومات ترلاسه کړم چیرې چې زه سواری کوم.
زما لومړی فکر دا و چې د سینسرونو سره یو کوچنی DIY هوا سټیشن جوړ کړم او له هغې څخه معلومات ترلاسه کړم. مګر ما "چیل بیا ایجاد نه کړ" او د هوا معلومات غوره کړل چې په ملکي هوایی چلند کې د تایید شوي معلوماتو سرچینې په توګه کارول کیږي، د بیلګې په توګه میتر (د هوا پېژندنې راپور) او دنده (TAF - د ترمینل ایروډروم وړاندوینه). په هوايي چلند کې، د سلګونو خلکو ژوند په هوا پورې اړه لري، نو وړاندوینې د امکان تر حده دقیقې دي.
دا معلومات په هر عصري هوایی ډګر کې د غږ له لارې XNUMX/XNUMX په فورمه کې خپریږي ATIS (د اتوماتیک ترمینل معلوماتو خدمت) او VOLMET (له فرانسوي څخه. vol - الوتنه او météo - هوا). لومړی په هوایی ډګر کې د ریښتیني هوا په اړه معلومات چمتو کوي ، او دوهم د راتلونکو 24-30 ساعتونو لپاره وړاندوینه چمتو کوي ، نه یوازې د نشر شوي هوایی ډګر کې ، بلکه په نورو کې هم.
د Vnukovo هوایی ډګر کې د ATIS عملیاتو بیلګه:
د VOLMET د Vnukovo هوایی ډګر کې د کار کولو یوه بیلګه
د اړوند حد لپاره هر وخت له تاسو سره د راډیو سکینر یا ټرانسیور وړل ګران دي ، او ما غوښتل په ټیلیګرام کې یو بوټ رامینځته کړم چې د تڼۍ په کلیک کولو سره تاسو ته اجازه درکوي ورته وړاندوینه ترلاسه کړئ. دا لږترلږه غیر عملي دی چې د دې لپاره جلا سرور تخصیص کړئ ، په بیله بیا ستاسو کور راسبیري ته غوښتنې لیږل.
له همدې امله ، ما پریکړه وکړه چې خدمت د شالید په توګه وکاروم
د شاته تیاری
یو فنکشن جوړ کړئ
د کنټرول پینل کې
وروسته له دې چې پروژه جوړه شي، برخې ته لاړ شئ دندې:
ت theۍ کښته کړئ یو فنکشن جوړ کړئ او ورته مطلوب نوم ورکړئ:
د فشار وروسته یو فنکشن جوړ کړئ موږ به د جوړ شوي فنکشن استازیتوب ولرو:
مخکې لدې چې تاسو په Python کې د کوډ رامینځته کول پیل کړئ ، تاسو به اړتیا ولرئ په ټیلیګرام کې بوټ رامینځته کړئ. زه به تشریح نه کړم چې دا څنګه ترسره کیږي - تفصيلي لارښوونې شتون لري
د کوډ چمتو کول
ما د ملي سمندري او اتموسفیر اداره (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] - ونوکووو، مسکو (روسیه - RU)؛
- [101130Z] - د میاشتې 10مه ورځ، د سهار 11:30 بجې GMT؛
- [31004MPS] - د باد لار 310 درجې، سرعت 4 m/s؛
- [9999] - افقی لید 10 کیلومتره یا ډیر؛
- [SCT048] - په 4800 فوټ (~ 1584 متر) کې ویشل شوي / ویشل شوي ورېځې؛
- [//24] - د تودوخې درجه 24 درجې، د اوښ نقطه 13 درجې سانتي ګراد؛
- [Q1014] - فشار (QNH) 1014 hectopascals (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
راځئ چې په ځانګړې توګه کرښو ته پام وکړو TEMPO и BECMG. TEMPO پدې معنی ده چې د ټاکل شوې مودې په جریان کې ریښتیني هوا به په دوره توګه بدلون ومومي. BECMG - هوا به په تدریجي ډول د یوې ټاکلې مودې دننه بدلون ومومي.
یعنی کرښه :
TEMPO 1012/1020 -TSRA BKN020CB
مانا به:
- [//1012] - د 12 څخه تر 20 ساعتونو پورې (د ګرینویچ منځنۍ وخت)؛
- [-TSRA] - تندر (TS = تندر) د باران سره (RA = باران) د ټیټ شدت (د منفي نښه)؛
- [BKN020CB] - د پام وړ (BKN = مات شوی)، cumulonimbus (CB = cumulonimbus) ورېځې د بحر له سطحې څخه په 2000 فوټ (610 متره) کې.
د هوا د پیښو لپاره ډیری شرایط شتون لري، او د دوی یاد ساتل ستونزمن دي. د 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 (غزول .py ممکن مشخص نه وي) او د پای ټکی فنکشن (په مثال کې ورکړل شوی دا دی اصلي).
- کړی د چاپیریال تغیرات یو متغیر ولیکئ ټوکن او دا د مطلوب ټیلیګرام بوټ نښه وټاکئ.
- ټیله کول خوندي او پراخ کړئله هغې وروسته موږ برخې ته ځو محرک.
- موږ سویچ واچوو د HTTP غوښتنهترڅو غوښتنه عامه شي.
موږ اوس په عامه توګه د فنکشن زنګ وهلو لپاره یو URL لرو. ټول هغه څه دي چې پاتې دي
/setwebhook <you bot token> <public URL of your function>
نتيجه
که هرڅه په سمه توګه ترسره شوي وي، ستاسو بوټ به سمدلاسه کار پیل کړي او د هوا هوا وروستي راپور مستقیم په میسینجر کې ښکاره کړي.
البته، کوډ ښه کیدی شي، مګر حتی په اوسني حالت کې دا د اعتبار وړ سرچینې څخه د خورا دقیق موسم او وړاندوینې موندلو لپاره کافي دی.
تاسو به زموږ د کوډ بشپړ نسخه ومومئ
سرچینه: www.habr.com