만드려는 DAG: 서울 8일 낮/최소/최대 온도 읽기
먼저 Open Weathermap에 각자 등록하고 자신의 API Key를 다운로드 받을 것
API Key를 open_weather_api_key라는 Variable로 저장
먼저 서울의 위도와 경도를 찾을 것
One-Call API를 사용: https://openweathermap.org/api/one-call-api
앞서 API KEY와 서울의 위도/경도를 사용해서 위의 API를 requests
모듈을 사용해서 호출
응답 결과에서 온도 정보(평균/최소/최대)만 앞으로 7일을 대상으로 출력해볼 것
엔드포인트
[<https://api.openweathermap.org/data/2.5/onecall?lat={lat}&lon={lon}&exclude=>](<https://api.openweathermap.org/data/2.5/onecall?lat=%7Blat%7D&lon=%7Blon%7D&exclude=>){part}&appid={API key}&units=metric
Open Weathermap 무료 API를 사용해서 서울의 다음 7일간의 낮/최소/최대 온도를 읽어다가 각자 스키마 밑의 weather_forecast라는 테이블로 저장
여기서 유의할 점은 created_date
은 레코드 생성시간으로 자동 채워지는 필드라는 점
CREATE TABLE keeyong.weather_forecast (
date date primary key,
temp float, -- 낮온도
min_temp float,
max_temp float,
created_date timestamp default GETDATE()
);
윈도우 함수
를 통해 중복 제거
One-Call API는 결과를 JSON 형태로 리턴해줌
.json()
이란 함수 사용
f = requests.get(link)
f_js = f.json()
결과 JSON에서 daily라는 필드에 앞으로 7일간 날씨 정보가 들어감 있음
dt
”라는 필드에 들어 있음. 이는 epoch이라고 해서 1970년 1월 1일 이후 밀리 세컨드로 시간을 표시. 이는 아래와 같은 코드로 읽을 수 있는 날짜로 변경 가능하다.
datetime.fromtimestamp(d["dt"]).strftime('%Y-%m-%d') # 2021-10-09
Open Weather API 호출 응답 보기
json 중 daily라는 키 값으로 존재하는 리스트에 앞으로 7일간의 온도 정보가 들어옴
datetime.fromtimestamp(d["dt"]).strftime('%Y-%m-%d') # 2021-10-09
temp 필드
가 온도 정보를 나타냄
False
인 점을 유의