پیاده سازی پروژه Weather Provider

  • مدرس : علی بیگدلی
  • تاریخ انتشار: 1404/05/27
  • تعداد بازدید: 9

پروژه: دریافت اطلاعات آب و هوا با استفاده از کلاس‌ها و API

اهداف پروژه

  • تمرین استفاده از کلاس‌های انتزاعی و ارث‌بری
  • پیاده‌سازی متدهای انتزاعی در کلاس‌های فرزند
  • تمرین کار با APIهای خارجی و کتابخانه requests
  • پردازش و نرمال‌سازی داده‌های JSON
  • ساخت برنامه تعاملی برای دریافت دما و رطوبت

۱. وارد کردن ماژول‌ها و تعریف متغیرهای سراسری

from abc import ABC, abstractmethod

import requests

وارد کردن کتابخانه‌های مورد نیاز: abc برای کلاس‌های انتزاعی و requests برای کار با API

۲. تعریف کلاس انتزاعی آب و هوا

class WeatherAbstract(ABC):

    @abstractmethod
    def get_current_weather(self, lat, lon):

        pass

کلاس انتزاعی که هر کلاس فرزند باید متد get_current_weather را پیاده‌سازی کند

۳. کلاس دریافت آب و هوا از OpenWeather

class OpenWeatherProvider(WeatherAbstract):
    base_url = "https://api.openweathermap.org/data/2.5/weather"

    def __init__(self, api_key):
        self.api_key = api_key

    def get_current_weather(self, lat, lon):
        params = {
            "lat": lat,
            "lon": lon,
            "appid": self.api_key

        }
        response = requests.get(self.base_url, params=params)

        normalize_data = {"temp": float(response.json()["main"]["temp"]) - 273.15,

                          "humidity": response.json()["main"]["humidity"]}

        return normalize_data

کلاس برای دریافت دما و رطوبت از API OpenWeather و تبدیل دما از کلوین به سانتی‌گراد

۴. کلاس دریافت آب و هوا از OpenMeteo

class OpenMeteoProvider(WeatherAbstract):

    base_url = "https://api.open-meteo.com/v1/forecast"

    def get_current_weather(self, lat, lon):
        params = {
            "latitude": lat,
            "longitude": lon,
            "current": "temperature_2m,relative_humidity_2m"
        }

        response = requests.get(self.base_url, params=params)
        normalize_data = {"temp": response.json()["current"]["temperature_2m"],
                          "humidity": response.json()["current"]["relative_humidity_2m"]}
        return normalize_data

کلاس برای دریافت دما و رطوبت از API OpenMeteo و نرمال‌سازی داده‌ها

۵. اجرای برنامه و دریافت داده‌ها

provider = OpenWeatherProvider("token")

print(provider.get_current_weather(lat=35.82472320684597, lon=51.00105750513447))

ایجاد نمونه‌ای از کلاس OpenWeatherProvider و دریافت اطلاعات آب و هوا برای مختصات مشخص

ثبت دیدگاه


نکته: آدرس ایمیل شما منتشر نخواهد شد
0/600

دیدگاه کاربران (0)


هیچ دیدگاهی ثبت نشده است. می‌توانید اولین نفر باشید.