برنامه هواشناسی با پایتون!
توی این آموزش میخوایم با پایتون یه اسکریپت خیلی ساده بنویسیم که شهر رو وارد بکنیم و آب و هوای اون شهر رو بهمون بده. برای این آموزش میخوایم از یه API رایگان برای هواشناسی استفاده کنیم پس به کتابخانه requests نیاز داریم که بتونیم با اون API ارتباط برقرار کنیم. همچنین برای اینکه خروجی زیباتر بشه یکم از ماژول os هم استفاده میکنیم. در کل سطح این آموزش مبتدی تا متوسط هستش.
مراحل کار
1. خب برای شروع نیاز داریم که توی سایت زیر ثبتنام کنیم:
وقتی ثبتنام کردین (خیلی سادهاس) برین توی پنلتون و یه چیزی هست به اسم API KEY که جلوش یه دکمه کپی داره، اون کلید رو کپی کنید و یه جا نگهداری کنید.
2. بعدش کتابخانه requests رو با pip یا هر پکیجمنیجری که دوست دارین، نصب کنید:
pip install requests
3. حالا یه فایل پایتون درست کنید و با کد ادیتور مورد علاقهتون اون رو باز کنید. اول از همه باید کتابخانههای requests و os رو وارد کنیم پس بنویسید:
import requests as rq import os
4. حالا یه متغیر به اسم api_key بسازین و اون کلید که کپی کردین رو توش بذارین (به فرمت رشته):
api_key = "PUT API KEY HERE"
5. حالا یه حلقه بینهایت بنویسید که هر بار از کاربر اسم شهر بگیره:
while True: city = input('Enter City: ')
6. حالا اینجاش خیلی مهمه! باید داخل همون حلقه و بعد از ورودی که گرفتین یه درخواست ارسال کنید به اون API که توش ثبتنام کردیم. این درخواست با کتابخانه requests که به اسم rq ایمپورتش کردیم و با متد get باید انجام بشه. همچنین درخواست ما باید حاوی api_token و اسم اون شهر باشه. پس یه لینک میسازیم به شکل زیر:
url = f"http://api.weatherapi.com/v1/current.json?key={api_key}&q={city}"
7. و یه درخواست ارسال میکنیم و پاسخ رو به شکل json دریافت میکنیم:
res = rq.get(url) data = res.json()
8. حالا میتونیم از این پاسخ که به شکل json هستش اطلاعاتی که میخوایم رو بگیریم! اطلاعات کاملی که میشه گرفت و میتونید توی داکیومنتهای اون API ببینید ولی چیزای مهم رو پایین چاپ کردم:
print(f'Location: {data["location"]["name"]} {data["location"]["country"]}') print(f'Temperature (C): {data["current"]["temp_c"]}') print(f'Condition: {data["current"]["condition"]["text"]}') print(f'Wind (kph): {data["current"]["wind_kph"]}') print();print()
نکته: اون print();print() که نوشتم برای این هستش که ورودی ها 2 خط از هم فاصله داشته باشن که وضعیت آب و هوای شهرها به هم نچسبه و قابل خوندن باشه!
نمونه خروجی که بهمون میده رو ببینید:
من اگر جای شما باشم حالا میرم و سعی میکنم این اسکریپت رو تبدیل کنم به یه برنامه گرافیکی مثلا با nicegui یا kivy! و مثلا براش عکس هم بذارین که اگر آفتابی بود یه عکس خورشید نشون بده یا اگر ابری بود یه عکس از ابر در حال بارش نشون بده و... یا حتی میشه تبدیلش کرد به یه بات تلگرام البته به شرطی که ساخت باتهای تلگرام رو بلد باشین.