اتي ڪيتريون ئي خدمتون آھن جيڪي موسم جي معلومات مهيا ڪن ٿيون، پر توھان کي ڪنھن تي ڀروسو ڪرڻ گھرجي؟ جڏهن مون اڪثر سائيڪل هلائڻ شروع ڪئي، ته مون چاهيو ٿي ته ان جاءِ جي موسمي حالتن جي باري ۾ سڀ کان وڌيڪ صحيح ڄاڻ حاصل ڪريان، جتي آئون سواري ڪريان.
منهنجو پهريون خيال هو ته هڪ ننڍڙو DIY موسم اسٽيشن سينسر سان ٺاهيو ۽ ان مان ڊيٽا حاصل ڪيو. پر مون ”رِينوينٽ دي ويل“ نه ڪيو ۽ موسم جي معلومات کي چونڊيو جيڪو سول ايوي ايشن ۾ تصديق ٿيل ڊيٽا جو ذريعو طور استعمال ڪيو ويندو آهي، يعني ميٽر (METeorological Aerodrome رپورٽ) ۽ TAF (TAF - ٽرمينل ايروڊروم جي اڳڪٿي). هوائي اڏي ۾، سوين ماڻهن جون زندگيون موسم تي منحصر آهن، تنهنڪري اڳڪٿيون ممڪن طور تي صحيح آهن.
اها معلومات هر جديد هوائي اڏي تي آواز ذريعي XNUMX/XNUMX فارم ۾ نشر ڪئي ويندي آهي ATIS (خودڪار ٽرمينل انفارميشن سروس) ۽ VOLMET (فرانسيسي کان. ٻ - پرواز ۽ météo - موسم). پهرين هوائي فيلڊ تي حقيقي موسم جي باري ۾ معلومات مهيا ڪري ٿي، ۽ ٻيو ايندڙ 24-30 ڪلاڪن لاء اڳڪٿي فراهم ڪري ٿو، نه رڳو نشر ٿيندڙ ايئر فيلڊ تي، پر ٻين تي پڻ.
Vnukovo ايئرپورٽ تي ATIS آپريشن جو مثال:
هڪ مثال ڪيئن VOLMET Vnukovo ايئرپورٽ تي ڪم ڪري ٿو
توهان سان لاڳاپيل رينج لاءِ هر وقت ريڊيو اسڪينر يا ٽرانسيور کڻي وڃڻ مشڪل آهي، ۽ مان ٽيليگرام ۾ هڪ بوٽ ٺاهڻ چاهيان ٿو، جيڪو هڪ بٽڻ جي ڪلڪ تي، توهان کي ساڳي اڳڪٿي حاصل ڪرڻ جي اجازت ڏئي ٿو. اهو گهٽ ۾ گهٽ غير عملي آهي انهي لاءِ هڪ الڳ سرور مختص ڪرڻ، انهي سان گڏ توهان جي گهر Raspberry ڏانهن درخواستون موڪلڻ.
تنهن ڪري، مون هڪ پس منظر طور خدمت استعمال ڪرڻ جو فيصلو ڪيو
پس منظر جي تياري
هڪ فنڪشن ٺاهيو
ڪنٽرول پينل ۾
منصوبي جي ٺهڻ کان پوء، سيڪشن ڏانهن وڃو ڪارڪن:
بٽڻ کي دٻايو هڪ فنڪشن ٺاهيو ۽ ان کي مطلوب نالو ڏيو:
دٻائڻ کان پوءِ هڪ فنڪشن ٺاهيو اسان وٽ ٺهيل فنڪشن جي نمائندگي هوندي:
پٿون ۾ ڪوڊ ٺاهڻ شروع ڪرڻ کان پهريان، توهان کي ٽيليگرام ۾ هڪ بوٽ ٺاهڻ جي ضرورت پوندي. مان بيان نه ڪندس ته اهو ڪيئن ڪيو ويو آهي - تفصيلي هدايتون آهن
ڪوڊ تيار ڪرڻ
مون نيشنل اوشيئنڪ اينڊ ايٽموسفيرڪ ايڊمنسٽريشن (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)؛
- [101130Z] - مهيني جو 10 هون ڏينهن، 11:30 ايم GMT؛
- [31004MPS] - واء جو رخ 310 درجا، رفتار 4 m/s؛
- [9999] - افقي نمائش 10 ڪلوميٽر يا وڌيڪ؛
- [SCT048] - 4800 فوٽ (~ 1584 ميٽر) تي ٽڙيل پکڙيل ڪڪر؛
- [24/13] - گرمي پد 24 ° سي، اوس پوائنٽ 13 ° سي؛
- [س1014] - پريشر (QNH) 1014 هيڪٽوپاسڪلز (750 ملي ايم ايڇ)؛
- [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 1012/1020 -TSRA BKN020CB
مطلب ٿيندو:
- [1012/1020] - 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 وضاحت نه ٿي سگھي) ۽ هڪ آخري پوائنٽ فنڪشن (مثال طور ڏنو ويو آهي مکيه).
- سيڪشن ماحولياتي تبديليون هڪ variable لکڻ ٽوڪ ۽ ان کي گهربل ٽيليگرام بوٽ جو نشان لڳايو.
- پڪو محفوظ ڪريو ۽ وڌايوجنهن کان پوء اسان سيڪشن ڏانهن وڃو محرڪ.
- اسان سوئچ لڳايو HTTP درخواستدرخواست کي عام ڪرڻ لاء.
اسان وٽ هاڻي هڪ URL آهي عوامي طور تي فنڪشن کي سڏڻ لاءِ. باقي اهو سڀ ڪجهه آهي
/setwebhook <you bot token> <public URL of your function>
نتيجي ۾
جيڪڏهن سڀ ڪجهه صحيح طريقي سان ڪيو ويو آهي، توهان جو بوٽ فوري طور تي ڪم ڪرڻ شروع ڪندو ۽ تازي هواياتي موسم جي رپورٽ سڌو سنئون ميسينجر ۾ ڏيکاريندو.
يقينن، ڪوڊ بهتر ٿي سگهي ٿو، پر ان جي موجوده حالت ۾ پڻ اهو ڪافي آهي ته هڪ قابل اعتماد ذريعن کان سڀ کان وڌيڪ صحيح موسم ۽ اڳڪٿي ڳولڻ لاء.
توھان اسان جي ڪوڊ جو پورو ورزن ڳوليندا
جو ذريعو: www.habr.com