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

1402/04/30 | 3964 |
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)

 


ثبت دیدگاه


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

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


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

نویسنده

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

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

آخرین پست ها

انتقال پروژه Django از پلتفرم Liara به پلتفرم Hamravesh
انتقال پروژه Django از پلتفرم Liara به پلتفرم Hamravesh
  • django 1403/05/28
پیاده سازی پروژه Django Channels (ASGI/Websocket) بر روی پلتفرم Hamravesh
پیاده سازی پروژه Django Channels (ASGI/Websocket) بر روی پلتفرم Hamravesh
  • django 1403/05/19
پیاده سازی پروژه django بر روی پلتفرم Caprover به همراه Media
پیاده سازی پروژه django بر روی پلتفرم Caprover به همراه Media
  • django 1403/05/15

آخرین دوره ها

آموزش arduino
آموزش Arduino
  • 0 135 دانشجو