කාලගුණ තොරතුරු සපයන සේවාවන් බොහොමයක් ඇත, නමුත් ඔබ විශ්වාස කළ යුත්තේ කුමක්ද? මම නිතර බයිසිකල් පදින්න පටන් ගත්තම මට ඕන වුණේ මම පදින තැන කාලගුණික තත්ත්වයන් ගැන ඉතාම නිවැරදි තොරතුරු ලබාගන්න.
මගේ පළමු සිතුවිල්ල වූයේ සංවේදක සහිත කුඩා DIY කාලගුණ මධ්යස්ථානයක් එකලස් කර එයින් දත්ත ලබා ගැනීමයි. නමුත් මම “රෝදය ප්රතිනිර්මාණය” නොකළ අතර සත්යාපිත දත්ත ප්රභවයක් ලෙස සිවිල් ගුවන් සේවයේ භාවිතා වන කාලගුණ තොරතුරු තෝරා ගත්තෙමි. මෙටාර් (කාලගුණ විද්යා ගුවන් යානා වාර්තාව) සහ TAF (TAF - Terminal Aerodrome Forecast). ගුවන් ගමන්වලදී, මිනිසුන් සිය ගණනකගේ ජීවිත කාලගුණය මත රඳා පවතී, එබැවින් අනාවැකි හැකි තරම් නිවැරදි වේ.
මෙම තොරතුරු පෝරමයේ සෑම නවීන ගුවන් තොටුපලකම කටහඬින් XNUMX/XNUMX විකාශනය කෙරේ ATIS (ස්වයංක්රීය පර්යන්ත තොරතුරු සේවාව) සහ VOLMET (ප්රංශ භාෂාවෙන්. වෝල් - පියාසර කිරීම සහ météo - කාලගුණය). පළමුවැන්න ගුවන් තොටුපළේ සැබෑ කාලගුණය පිළිබඳ තොරතුරු සපයන අතර, දෙවැන්න විකාශන ගුවන් තොටුපළේ පමණක් නොව, ඉදිරි පැය 24-30 සඳහා පුරෝකථනයක් සපයයි.
Vnukovo ගුවන් තොටුපලේ ATIS මෙහෙයුමේ උදාහරණය:
VOLMET Vnukovo ගුවන් තොටුපලේ ක්රියා කරන ආකාරය පිළිබඳ උදාහරණයක්
අනුරූප පරාසය සඳහා සෑම විටම ඔබ සමඟ රේඩියෝ ස්කෑනරයක් හෝ සම්ප්රේෂකයක් රැගෙන යාම අපහසු වන අතර, මට ටෙලිග්රාම් හි බොට් එකක් සෑදීමට අවශ්ය වූ අතර, බොත්තමක් ක්ලික් කිරීමෙන් ඔබට එම පුරෝකථනය ලබා ගත හැකිය. මේ සඳහා වෙනම සේවාදායකයක් වෙන් කිරීම මෙන්ම ඔබේ නිවසේ Raspberry වෙත ඉල්ලීම් යැවීම අවම වශයෙන් ප්රායෝගික නොවේ.
එමනිසා, මම සේවාව පසුබිමක් ලෙස භාවිතා කිරීමට තීරණය කළෙමි
පසුබිම සකස් කිරීම
කාර්යයක් සාදන්න
පාලක පැනලයේ
ව්යාපෘතිය නිර්මාණය කිරීමෙන් පසුව, කොටස වෙත යන්න කාර්යයන්:
බොත්තම ඔබන්න කාර්යයක් සාදන්න සහ එයට කැමති නම දෙන්න:
එබීමෙන් පසු කාර්යයක් සාදන්න අපට සාදන ලද ශ්රිතයේ නිරූපණයක් ඇත:
ඔබ Python හි කේතය සෑදීම ආරම්භ කිරීමට පෙර, ඔබට Telegram හි bot එකක් සෑදිය යුතුය. මෙය සිදු කරන්නේ කෙසේදැයි මම විස්තර නොකරමි - සවිස්තරාත්මක උපදෙස් තිබේ
කේතය සකස් කිරීම
මම විශ්වාසනීය දත්ත මූලාශ්රයක් ලෙස ජාතික සාගර සහ වායුගෝලීය පරිපාලනය (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 km හෝ ඊට වැඩි;
- [SCT048] - අඩි 4800 (~ 1584 m) හි විසිරුණු / විසිරුණු වලාකුළු;
- [24/13] - උෂ්ණත්වය 24 ° C, පිනි ස්ථානය 13 ° C;
- [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
අපි විශේෂයෙන් රේඛා කෙරෙහි අවධානය යොමු කරමු ටෙම්පෝ и BECMG. TEMPO යනු නිශ්චිත කාල සීමාව තුළ සැබෑ කාලගුණය වරින් වර වෙනස් වන බවයි. BECMG - නියමිත කාල සීමාව තුළ කාලගුණය ක්රමයෙන් වෙනස් වේ.
එනම්, රේඛාව:
TEMPO 1012/1020 -TSRA BKN020CB
අදහස් වනු ඇත:
- [1012/1020] - පැය 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)
- අපි සම්පූර්ණ ඩිරෙක්ටරය ZIP සංරක්ෂිතයකට ඇසුරුම් කර සාදන ලද කාර්යයට පාලක පැනලය වෙත යන්නෙමු.
- තල්ලු කරන්න සංස්කරණය කරන්න සහ කේතය සමඟ සංරක්ෂිතය බාගත කරන්න.
- ගොනුවේ සාපේක්ෂ මාර්ගය පුරවන්න ටෙලි_බොට් (දිගුව .py නිශ්චිතව දක්වා නොමැති විය හැක) සහ අවසාන ලක්ෂ්ය ශ්රිතයක් (උදාහරණයේ දී මෙය වේ ප්රධාන).
- කොටස පාරිසරික විචල්යයන් විචල්යයක් ලියන්න ටෝකන් සහ එයට අවශ්ය ටෙලිග්රාම් බොට් එකේ ටෝකනය පවරන්න.
- තල්ලු කරන්න සුරකින්න සහ පුළුල් කරන්න, ඉන්පසු අපි අංශයට යන්නෙමු ප්රේරක.
- අපි ස්විචය තැබුවෙමු HTTP ඉල්ලීමඉල්ලීම ප්රසිද්ධ කිරීමට.
ශ්රිතය ප්රසිද්ධියේ ඇමතීමට අපට දැන් URL එකක් ඇත. ඉතිරිව ඇත්තේ එය පමණි
/setwebhook <you bot token> <public URL of your function>
ප්රතිඵලය
සෑම දෙයක්ම නිවැරදිව සිදු කර ඇත්නම්, ඔබේ බොට් වහාම ක්රියා කිරීම ආරම්භ කර නවතම ගුවන් කාලගුණ වාර්තාව සෘජුවම පණිවිඩකරු තුළ ප්රදර්ශනය කරනු ඇත.
ඇත්ත වශයෙන්ම, කේතය වැඩිදියුණු කළ හැකි නමුත්, එහි වත්මන් තත්වය තුළ පවා විශ්වාසදායක මූලාශ්රයකින් වඩාත් නිවැරදි කාලගුණය සහ අනාවැකි සොයා ගැනීමට ප්රමාණවත් වේ.
අපගේ කේතයේ සම්පූර්ණ අනුවාදය ඔබට සොයාගත හැකිය
මූලාශ්රය: www.habr.com