در این قسمت از آموزش به بررسی api سایت openweather می پردازیم و از آن برای گرفتن داده های مربوط به آب و هوای یک شهر استفاده می کنیم. ساختار برنامه ما بدین شکل خواهد بود که پس از گرفتن داده ها و پردازش و انتخاب داده های مورد اهیمت ما اقدام به نگهداری داده در بازه های زمانی تعیین شده در دیتابیس sqlite خواهیم کرد.
برای گرفتن داده از 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)
با استفاده از کتابخانه 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)
واقعا عالی بود ممنون از زحماتتون
سلام ویدیوهاتون عالی هستن بشتر دوره هارو میبینم و لذت میرم نکته ای که هست من برای نصب ماژول های مختلف که میخاستم از دستور pip استفاده کنم با اروری بر میخوردم که به این اشاره داشت که دستور "pip"ناشناخته هستش اگه میشه یه راهنمایی بکنید
در زمان نصب پایتون تیک مربوط به نصب pip رو احتمالا نزدید یا path رو هم نزدید توی دوره جنگو مقدماتی برای نصب پایتون توضیح مفصلی براش دادم می تونید به مکتبخونه و دوره جنکو مقدماتی سر بزنید و بخش فصل اولش که رایگان هستش رو ببینید
سلام خدمت شما اموزش هاتون حرف نداره لطفا اموزش جدید بزارید
نظر لطفتونه، تلاش بر همین هستش که آموزش های بیشتری قرار بگیره
سلام لطفا اموزش های بیشتری بزارید تشکر خیلی عالی هستین
چشم تلاشم رو خواهم کرد تا آموزش های بیشتری رو آماده کنم اما مسئله ای که هستش دوره های فعلی باید تمام بشن