공공데이터를 이용해서 저장했다.
중요
api 실행 시 현재 시간 -1일 까지만 조회가 가능했다... 7일치를 모으려면 일주일 동안 매일 데이터를 저장해야함...(이런데서 airflow 이런걸 쓰나...?)
내일은... 공휴일데이터(?) 가져와야지...
이걸 사용했다.
단기예보
앞에서 설명한 부분은 빼고 새로운 부분만 설명
모든 데이터를 다 넣어줌
하루 전 데이터만 가능해서... 현재 시간 +1을 해서 가져와야했다.
now = datetime.now()
for h in range(now.hour + 1, 24):
dic = defaultdict(list)
today = date.today()
yesterday = date.today() - timedelta(1)
params = {'serviceKey': '키값',
'pageNo': '1', 'numOfRows': '1000', 'dataType': 'JSON', 'base_date': f'{yesterday.strftime("%Y%m%d")}',
'base_time': f'{h}00', 'nx': '60', 'ny': '127'}
초단기실황 조회를 이용했다.
예보는 예상이기 때문에 필요가 없었고 실제 날씨가 중요했다.
import json
import requests
import pandas as pd
import pymysql
from sqlalchemy import create_engine
from datetime import date, timedelta, datetime
from collections import defaultdict
engine = create_engine('mysql+pymysql://bike:dbgusals1@localhost:3306/use_bike')
url = 'http://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/getUltraSrtNcst'
now = datetime.now()
for h in range(now.hour + 1, 24):
dic = defaultdict(list)
today = date.today()
yesterday = date.today() - timedelta(1)
if h < 10:
params = {'serviceKey': '키값',
'pageNo': '1', 'numOfRows': '1000', 'dataType': 'JSON', 'base_date': f'{yesterday.strftime("%Y%m%d")}',
'base_time': f'0{h}00', 'nx': '60', 'ny': '127'}
else:
params = {
'serviceKey': '키값',
'pageNo': '1', 'numOfRows': '1000', 'dataType': 'JSON', 'base_date': f'{yesterday.strftime("%Y%m%d")}',
'base_time': f'{h}00', 'nx': '60', 'ny': '127'}
response = requests.get(url, params=params)
json_ob = json.loads(response.content)
json_ar = json_ob.get('response').get('body').get('items').get('item')
dic['DATE'].append(f'{yesterday.strftime("%Y-%m-%d")}" "{h}')
for i in json_ar:
dic[i['category']].append(i['obsrValue'])
df = pd.DataFrame(dic)
df.to_sql(name='weather', con=engine, if_exists='append', index=False)