إنشاء برنامج لعرض الطقس بلغة البرمجة بايثون

إنشاء برنامج لعرض الطقس بلغة البرمجة بايثون

في هذه المقالة سوف نتعلم أساسيات استخدام API مع بايثون. سننشئ برنامج بسيط يستدعي البيانات من واجهة برمجة التطبيقات الخاصة بموقع Openweathermap ونعرض النتيجة للمستخدم.

1- الحصول علي مفتاح API

Openweathermap هي خدمة توفر بيانات الطقس ، بما في ذلك بيانات الطقس الحالية والتنبؤات لمطوري خدمات الويب وتطبيقات الهاتف المحمول.

لتحصل علي مفتاح API عليك التوجه إلى موقع OpenWeatherMap والتسجيل للحصول على خطة مجانية إذا لم تكن قد قمت بذلك بالفعل. ثم قم بزيارة قسم API للحصول على مفتاحك الخاص. يمكنك استخدام المفتاح الافتراضي أو إنشاء مفتاح جديد كما تريد. قد تضطر إلى الانتظار لفترة من الوقت حتى يتم التحقق من مفتاحك.

2- إنشاء البرنامج

سنحتاج إلي مكتبة requests لنحصل علي البيانات لذا سيتم استدعائها في السطر الأول.

import requests

ثم ندع مفتاح API في متغير

import requests

api = 'Your Api Key Here'

والآن سنقوم بإنشاء دالة لتحتوي علي الكود الخاص بنا ثم نطلب من المستخدم كتابة اسم المدينة المطلوبة

import requests

api = 'Your Api Key Here'
def get_weather():
    # set current city
    city = input('write city name: ')

والآن سنضع متغير للرابط الخاص بالـ Api

import requests

api = 'Your Api Key Here'
def get_weather():
    # set current city
    city = input('write city name: ')
    # weather api
    url = f'http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api}'

والآن حان دور مكتبة requests لسحب البيانات في شكل json

import requests

api = 'Your Api Key Here'
def get_weather():
    # set current city
    city = input('write city name: ')
    # weather api
    url = f'http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api}'
    # request weather data
    response = requests.get(url).json()

والآن سنقوم بتجربة الكود لنري ما الناتج وستكون التجربة علي مدينة القاهرة علي سبيل المثال

write city name: cairo
{'coord': {'lon': 31.25, 'lat': 30.06}, 'weather': [{'id': 751, 'main': 'Sand', 'description': 'sand', 'icon': '50d'}], 'base': 'stations', 'main': {'temp': 298.15, 'feels_like': 289.62, 'temp_min': 298.15, 'temp_max': 298.15, 'pressure': 1013, 'humidity': 19}, 'visibility': 4000, 'wind': {'speed': 9.3, 'deg': 210}, 'clouds': {'all': 40}, 'dt': 1607351711, 'sys': {'type': 1, 'id': 2514, 'country': 'EG', 'sunrise': 1607315902, 'sunset': 1607352907}, 'timezone': 7200, 'id': 360630, 'name': 'Cairo', 'cod': 200}

حتي الآن نحن علي الطريق الصحيح وفي الخطوة القادمة سنقوم بتقطيع البيانات لعرضها بشكل منظم، واذا نظرت في البيانات في المثال السابق ستجد عنصر يسمي weather وهذا هو ما سنتعامل معاه لنجد أحوال الطقس وعنصر يسمي main وهذا لدرجات الحرارة والآن هيا بنا لنري كيف.

import requests

api = 'Your Api Key Here'
def get_weather():
    # set current city
    city = input('write city name: ')
    # weather api
    url = f'http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api}'
    # request weather data
    response = requests.get(url).json()
    # weather data
    weather = response['weather']
    
    # status
    status = weather[0]['main']
    
    # description
    description = weather[0]['description']

في الكود السابق تم استدعاء العنصر weather والعنصر هو من نوع البيانات list أي أن له فهرس وقيمة ولهذا اخترنا رقم الفهرس 0 لأنه به عدة بيانات اخري لا نحتاجها ونحتاج حالة الطقس والوصف فقط وهذا موضح كيف استدعيناهم بالكود السابق، وفي الكود التالي سنقوم باستدعاء البيانات الخاصة بدرجات الحرارة.

import requests

api = 'Your Api Key Here'
def get_weather():
    # set current city
    city = input('write city name: ')
    # weather api
    url = f'http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api}'
    # request weather data
    response = requests.get(url).json()
    # weather data
    weather = response['weather']
    
    # status
    status = weather[0]['main']
    
    # description
    description = weather[0]['description']

    # temrature data
    temprature = response['main']

    # current temprature
    temp = temprature['temp']

    # min temprature
    temp_min = temprature['temp_min']

    # max temprature
    temp_max = temprature['temp_max']

    # pressure
    pressure = temprature['pressure']

    # humidity
    humidity = temprature['humidity']

في الكود السابق تم إضافة عنصر mainوهو لدرجة الحرارة و الدرجة الصغرى والقصوي والضغط والرطوبة وتم اضافة متغير لكل منهما حتي نتسطيع طباعتهم للمستخدم بشكل أنيق ومنظم وفي الكود التالي نكون قد أنهينا البرنامج بشكل بسيط ويمكنك التعديل وإضافة أفكار جديدة للتطوير.

import requests

api = 'Your Api Key Here'
def get_weather():
    # set current city
    city = input('write city name: ')
    # weather api
    url = f'http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api}'
    # request weather data
    response = requests.get(url).json()
    # weather data
    weather = response['weather']
    
    # status
    status = weather[0]['main']
    
    # description
    description = weather[0]['description']

    # temrature data
    temprature = response['main']

    # current temprature
    temp = temprature['temp']

    # min temprature
    temp_min = temprature['temp_min']

    # max temprature
    temp_max = temprature['temp_max']

    # pressure
    pressure = temprature['pressure']

    # humidity
    humidity = temprature['humidity']

    # print weather data
    print(f'weather now: {status}\ndescription: {description}')
    # print temprature data
    print(f'temprature now: {temp}\nmin:{temp_min}\nmax: {temp_max}\npressure: {pressure}\nhumidity: {humidity}')

if __name__ == '__main__':
    get_weather()

إليك بعض نتائج البرنامج لعدة مدن مختلفة:

النتيجة الأولي لمدينة دبي

write city name: dubai
weather now: Clouds
description: scattered clouds
temprature now: 298.3
min:298.15
max: 298.71
pressure: 1016
humidity: 50

النتيجة الثانية لمدينة نيويورك

write city name: new york
weather now: Clear
description: clear sky
temprature now: 274.86
min:273.71
max: 276.15
pressure: 1011
humidity: 59

النتيجة الثالثة لمدينة لندن

write city name: london
weather now: Mist
description: mist
temprature now: 275.78
min:275.37
max: 276.15
pressure: 997
humidity: 93

وبهذا نكون قد انتهينا من إنشاء برنامج لعرض بيانات الطقس بلغة البرمجة بايثون، وأتمني منكم الدعم بالتعليق لتحفيزي بالإستمرار في نشر الدروس والمقالات التعليمية ❤❤.

ادعمنا بتعليق