آموزش ساخت برنامه گرفتن وضعیت آب و هوا از openweather با پایتون

1402/04/30 | 2199 |
python

در این قسمت از آموزش به بررسی api سایت openweather می پردازیم و از آن برای گرفتن داده های مربوط به آب و هوای یک شهر استفاده می کنیم. ساختار برنامه ما بدین شکل خواهد بود که پس از گرفتن داده ها و پردازش و انتخاب داده های مورد اهیمت ما اقدام به نگهداری داده در بازه های زمانی تعیین شده در دیتابیس sqlite خواهیم کرد.

 

 

مرحله اول- گرفتن داده از openweather 

برای گرفتن داده از openweather ابتدا بایستی که در این سایت عضو شده و اقدام به گرفتن api key نمایید که در ویدئو به خوبی این روند توضیح داده شده. سپس با استفاده از کتابخانه requests ساده ترین حالت گرفتن داده از سایت openweather را بر اساس currentweather data انجام می دهیم. قطعه کد زیر تابع گرفتن داده مربوط به این api را به شما نشان می دهد.

در صورت نصب نبودن کتابخانه requests از دستور زیر در ترمینال و یا cmd استفاده نمایید:

pip install requests # for windows
pip3 install requests # for linux & mac

نکته: کلید خود را جایگزین کلید ذکر شده در مثال نمایید

import requests

def 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'))

مرحله دوم - ایجاد حلقه تکرار

کافیه که تابع مورد نظر را با در نظر گرفتن تاخیر زمانی در یک حلقه تکرار قرار دهید.

import requests
import time
def 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()

while True:
    print(get_weather_data('Kokkola'))
    time.sleep(5)

 مرحله سوم - پردازش داده 

در این قسمت با جدا سازی داده های مورد نیاز و تبدیل timestamp به human date time مقادیر را نرمال سازی کرده و برای ذخیره سازی آماده می کنیم.

import requests
import time

def proccess_data(data):
    # change timestamp to human time with:
    # time.ctime(timestamp)
    return {"city":data['name'],"datetime":time.ctime(int(data['dt'])),"temp":data['main']['temp'],"humidity":data['main']['humidity']}
    

def 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 proccess_data(r.json())

while True:
    print(get_weather_data('Kokkola'))
    time.sleep(5)

 مرحله چهارم - ساخت دیتابیس و جدول و تابع Insert

با استفاده از کتابخانه sqlite3 افدام به ساخت توابعی برای کنترل ساخت دیتابیس و جدول کرده و یک تابع نیز برای درج داده در جدول را در نظر می گیریم که برای یادگیری این موضوعات کافیست که به دوره آموزش Sqlite در سایت مراجعه نمایید.

import sqlite3

def sql_connector():
    con = sqlite3.connect("weather.db")
    cur = con.cursor()
    return con,cur

def create_table(con,cur):
    cur.execute("CREATE TABLE IF NOT EXISTS weather(name TEXT,datetime TEXT,temp TEXT, humidity TEXT)")
    con.commit()

def insert_data(con,cur,data):
    cur.execute("INSERT INTO weather values(?,?,?,?)",tuple([v for k,v in data.items()]))
    con.commit()
    

مرحله پنجم - قطعه کد نهایی

حال که همه چیز آماده شده کافیست که قطعات پازل را کنار هم قرار دهیم.

 

# Author : Ali Bigdeli
# Website: icc-aria.ir
# Project Name : Open Weather

import requests 
import time
import sqlite3

def sql_connector():
    con = sqlite3.connect("weather.db")
    cur = con.cursor()
    return con,cur

def create_table(con,cur):
    cur.execute("CREATE TABLE IF NOT EXISTS weather(name TEXT,datetime TEXT,temp TEXT, humidity TEXT)")
    con.commit()

def insert_data(con,cur,data):
    cur.execute("INSERT INTO weather values(?,?,?,?)",tuple([v for k,v in data.items()]))
    con.commit()
    
def proccess_data(data):
    return {"city":data['name'],"datetime":time.ctime(int(data['dt'])),"temp":data['main']['temp'],"humidity":data['main']['humidity']}
    
def 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 proccess_data(r.json())

con,cur = sql_connector()
create_table(con,cur)

while True:
    data_weather = get_weather_data('Tehran')
    insert_data(con,cur,data_weather)
    print(data_weather)
    time.sleep(5)

 


avatar
علی بیگدلی

نویسنده

دوره های من در مکتبخونه

آموزش جنگو پیشرفته
  • سطح: پیشرفته 4.9
آموزش جنگو Django
  • سطح: مقدماتی 4.6

آخرین پست ها

نحوه نصب و پیاده سازی Caprover بر روی لینوکس
نحوه نصب و پیاده سازی Caprover بر روی لینوکس
  • django 1402/11/29
استفاده از محیط docker-compose و dev container در مدیریت پروژه
استفاده از محیط docker-compose و dev container در مدیریت پروژه
  • django 1402/11/22
پایشگر آب و هوا و کنترل از طریق MQTT با نرم افزار IOT Dashboard
پایشگر آب و هوا و کنترل از طریق MQTT با نرم افزار IOT Dashboard
  • micro python 1402/06/11

آخرین دوره ها

آموزش arduino
آموزش Arduino
  • رایگان 71 دانشجو
آموزش رابط گرافیکی Tkinter
آموزش Tkinter
  • رایگان 378 دانشجو