공공 데이터 이용을 위한 OPEN API 활용 코딩 연습 중



import requests
import xmltodict
import json
import datetime

API_KEY = "**********************************************************************************************************"
## URL이 인코딩된 상태로 제공된 KEY이므로 Decoding이 필요
API_KEY_decode = requests.utils.unquote(API_KEY)
## 위의 명령어로 URL이 제외된 디코딩 코드

now = datetime.datetime.now() ## 현재 시간 얻어오기
date = "{:%Y%m%d}".format(now) ## 날짜 포멧을 변경
time = "{:%H00}".format(now) ## 시간 데이터만 뽑기

if(now.minute >= 30) : ## 30분 넘으면 정시로
time = "{0}00".format(now.hour)
else : ## 30분 이전이면 현재 시간에서 1시간 뺀 데이터로 얻어오기 위함
time = "{0}00".format(now.hour - 1)

req_url = "http://apis.data.go.kr/1360000/VilageFcstInfoService/getUltraSrtFcst"
baseTime = time ## 예보 발표 시간 지정(정시 지정이 필요함)
baseDate = date
nx_val = 60 ## 예보 지점 x좌표(서울 종로구 사직동)
ny_val = 127 ## 예보 지점 y좌표(서울 종로구 사직동)
num_of_rows = 30 ## 한 페이지에 포함된 결과수
page_no = 1 ## 페이지 번호
output = "json" ## 응답 데이터 포멧 지정
req_param = {"ServiceKey" : API_KEY_decode, "nx" : nx_val, "ny" : ny_val,
"base_date" : baseDate, "base_time" : baseTime, "pageNo" : page_no,
"num_of_rows" : num_of_rows, "dataType" : output}
r = requests.get(req_url, params = req_param)
dict_data = r.json()
weather_info = dict_data['response']['body']['items']['item']

sky_condition = ["없음", "있음"]
rain_type = ["없음", "있음"]
print("발표 날짜 : {}".format(weather_info[0]["baseDate"]))
print("발표 시간 : {}".format(weather_info[0]["baseTime"]))
print("weather information : ", weather_info)

for k in range(len(weather_info)) :
weather_item = weather_info[k]
fcstValue = int(weather_item['fcstValue'])
fcstTime = int(weather_item['fcstTime'])
if(weather_item['category'] == 'LGT') :
print('* 시간 : {0}, 낙뢰 : {1}'.format(fcstTime, sky_condition[fcstValue]))
elif (weather_item['category'] == 'PTY'):
print('* 시간 : {0}, 강수 : {1}'.format(fcstTime, rain_type[fcstValue]))

(데이터 분석을 위한 파이썬 철저 입문의 예문 응용)


+ Recent posts