دریافت وضعیت آب و هوا از طریق پایتون
دریافت وضعیت آب و هوا از طریق پایتون یکی از پروژه هایی است که در زمان یادگیری برنامه نویسی پایتون می توانید از آن برای تقویت اطلاعات خود استفاده کنید. با استفاده از کد هایی که در اینجا ارائه کرده ایم شما می توانید یک نرم افزار وضعیت آب و هوا با استفاده از پایتون و با کمک openweather ایجاد کنید.
در این مطلب می خواهیم از طریق api متن باز سایت OpenWeather، وضعیت آب و هوا را بر اساس نام شهر، پیدا کنیم. اولین کاری که باید انجام دهید، ثبت نام در سایت OpenWeather.org است. پس از آن باید از طریق این لینک در سایت، درخواست API KEY کنید. از این API KEY درون برنامه برای انجام احراز هویت (authentication) استفاده می شود.
OpenWeather.org اطلاعات مختلفی از وضعیت آب و هوا را در اختیار کاربران قرار می دهد و می توانیم از طریق اطلاعات مختلفی مانند نام شهر (Tehran) یا نام شهر و کد کشور (Tehran,Ir) و یا از طریق طول و عرض جغرافیایی (longitude and latitude) می توانیم اطلاعات را بدست آوریم. در صفحه API های سایت می توانید انواع اطلاعات قابل بدست آمدن در مورد وضعیت آب و هوا را ببینید. در این مطلب می خواهیم بر اساس نام شهر، وضعیت فعلی آب و هوا (current weather data) را پیدا کنیم تا بتوانیم ساخت برنامه وضعیت آب و هوا را با پایتون یا جاوا اسکریپت بسازیم.
ساخت نرم افزار هواشناسی یکی از پروژه های ساده با پایتون است که شما میتوانید با مشاهده پروژه های ساده پایتون در سایت امیر رسولی آنها را مشاهده کنید.
ساخت نرم افزار هواشناسی با پایتون
در صفحه وضعیت فعلی آب و هوای سایت OpenWeather می بینید که می توانیم از روش های مختلفی مانند نام شهر، شناسه (یا ID) شهر و ناحیه جغرافیایی، وضعیت فعلی آب و هوا را پیدا کنیم. همچنین همانطور که در شکل زیر می بینید برای هر نوع از این روش ها یک لینک با رشته کوئری هایی منحصر به فرد وجود دارد. شما می توانید از روش های مختلفی شهر های مورد نظر را انتخاب کنید. نکته مهمی که وجود دارد این است که حتما باید API KEY دریافتی را از طریق کلید appid به تمامی لینک ها اضافه کنید. پس فرمت کلی لینک دریافت وضعیت آب و هوا از طریق نام شهر به یکی از صورت های زیر خواهد بود.
import requestsdef get_weather_data(city='Tehran',appid='cb4ca218e1f52b8d80f0dd1f3faec355'):
URL = "https://api.openweathermap.org/data/2.5/weather"
PARAMS = {'q' :city ,'appid' :appid }
r = requests.get(url = URL, params = PARAMS)
return r.json()
print(get_weather_data('Kokkola'))
خواندن داده های وضعیت آب و هوا در پایتون و جاوا اسکریپت
گام اول آماده سازی لینک دریافت داده های وضعیت آب و هوا است که به فرمت json نمایش داده می شوند. به طور مثال فرض کنید میخواهیم وضعیت فعلی شهر تهران را بدست آوریم پس با توجه به اولین فرمت و با در اختیار داشتن API KEY باید لینک را به صورت زیر آماده کنیم. لطفا به جای YOUR_API_KEY رشته API KEY خودتان را جایگزین کنید.
کد زیر نمونه ای از داده های برگشتی برای شهر تهران را نشان می دهد. همانطور که می بینید اطلاعات مختلفی نشان داده می شود که ما در حد این مطلب تنها وضعیت اب و هوا و درجه حرارت را می خواهیم نمایش دهیم.
کد برنامه هواشناسی برای جاوا اسکریپت
{
"coord":{
"lon":51.4,
"lat":35.7
},
"weather":[
{
"id":801,
"main":"Clouds",
"description":"few clouds",
"icon":"02d"
}
],
"base":"stations",
"main":{
"temp":307.48,
"pressure":1011,
"humidity":13,
"temp_min":306.15,
"temp_max":309.15
},
"visibility":10000,
"wind":{
"speed":3.1,
"deg":210
},
"clouds":{
"all":20
},
"dt":1529661600,
"sys":{
"type":1,
"id":7032,
"message":0.0035,
"country":"IR",
"sunrise":1529630346,
"sunset":1529682829
},
"id":112931,
"name":"Tehran",
"cod":200
}
ابتدا باید سه ماژول زیر را به برنامه ضمیمه کنید. از متد ()encodeurl از ماژول urlib3 برای ایجاد رشته کوئری و الحاق آن به لینک دریافت داده ها استفاده می شود. این متد یک دیکشنری را شامل نام کلید و مقدار انتسابی به کلید را دریافت می کند. بنابراین برای این مطلب دو کلید q و appid لازم است که به صورت رشته کوئری به لینک به فرمت کلی اضافه شود. از متد ()urlopen از ماژول urlib برای باز کردن و خواندن آدرس url استفاده می کنیم. در نهایت از متد ()loads از ماژول json برای تبدیل داده های json به نوع دیکشنری استفاده می شود.
کد برنامه هواشناسی برای پایتون
from urllib3.request import urlencode<
from urllib.request import urlopen
import json
api_key = 'YOUR_API_KEY'
api_link = 'https://api.openweathermap.org/data/2.5/weather?'
def getWeatherInfoByCityName(city):
qs = {'q':city, 'appid':api_key}
weather_statuses = {}
url = api_link + urlencode(qs)
with urlopen(url) as fd:
json_data = json.loads(fd.read().decode())
weather_statuses['temp'] = json_data['main']['temp']
weather_statuses['description'] = json_data['weather'][0]['description']
return weather_statuses
weather = getWeatherInfoByCityName('tehran')
print("Weather status of Tehran: {}".format(weather['description']))
توجه کنید که در خط ۶ در انتهای آدرس https://api.openweathermap.org/data/2.5/weather علامت ? وجود دارد. عدم قرار دادن علامت ? باعث بروز خطا در دریافت اطلاعات می شود. دلیل این است که فرمت کلی رشته کوئری (یا query string) به صورت key1=value1&key2=value2? می باشد. در کد بالا تابعی به نام getWeatherInfoByCityName وجود دارد که نام یک شهر را دریافت می کند و سپس در خط ۹ دیشکنری که شامل کلید های q و appid است را همراه با مقادیر لازم ایجاد می کند. حتما API KEY خود را در متغیر api_key ذخیره کنید. سپس درون تابع و توسط متد ()encodeurl فرمت کلی آدرس آماده شده است. پس از آن این ادرس از طریق متغیری به نام url به متد ()urlopen ارسال می شود تا نتیجه برگشت داده شود که می تواند شامل داده های json یا خطای ۴۰۴ باشد.
از تمامی اطلاعاتی که برگشت داده می شود، می خواهیم درجه حرارت به فارنهایت و توضیح وضعیت فعلی هوا (مثلا clear یا few clouds) را پیدا کنیم. پیش از این و توسط متد ()loads از ماژول json اطلاعات json دریافتی به نوع دیکشنری تبدیل شده اند. در نتیجه می توانیم به کلید های آن دسترسی داشته باشیم. لطفا برای درک دسترسی به مقادیر از طریق نام کلید ها، با دقت فرمت json خروجی که در بالا نوشته شده است را مطالعه کنید تا متوجه شوید. در نهایت مثلا نام شهر tehran را ارسال کرده ایم و سپس در خط آخر اطلاعات برگشتی را نمایش داده ایم.
شم
جمع بندی
در این مطلب دریافت وضعیت آب و هوا از طریق پایتون را انجام دادیم که با استفاده از آن میتوانید یک برنامه هواشناسی در پایتون را اجرا کنید. اگر در آموزش برنامه نویسی پایتون، مبتدی هستید، بهتر است با آموزش های سایت امیر رسولی همراه شوید. در صورت نیاز می توانید از بخش آموزش ها، آموزش برنامه نویسی پایتون را دریافت کنید و به صورت حرفه ای این آموزش را شروع کنید.
درباره مدیریت
من عاشق برنامه نویسی و تکنولوژی هستم و 10 سال در این زمینه مشغول به فعالیت هستم و پروژه های مختلفی رو در زمینه های سایت و شبکه های کامپیوتری و امنیت اطلاعات انجام دادم و در حال حاضر مدیر و موسس شرکت انفورماتیک طراحی پایا آنوش هستم که در زمینه ی طراحی سایت و سیستم های هوشمند و برقراری امنیت اطلاعات سیستم های کامپیوتری و همچنین آموزش فعالیت دارد و میخواهم هر آنچه که در طی این 10 سال یاد گرفتم و تجربه کردم رو با شما به اشتراک بگذارم.
نوشته های بیشتر از مدیریت
دیدگاهتان را بنویسید