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



import requests
import xmltodict
import json
import datetime

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

req_url = "http://openapi.airkorea.or.kr/openapi/services/rest/MsrstnInfoInqireSvc/getTMStdrCrdnt"
umd_name = "논현동"
num_of_rows = 10
page_no = 1
output = "json"
req_params = {"ServiceKey" : API_KEY_decode, "numOfRows" : num_of_rows, "pageNo" : page_no, "umdName" : umd_name,
"_returnType" : output}
dict_data = requests.get(req_url, params = req_params).json()
for k in range(dict_data['totalCount']) :
sido = dict_data['list'][k]['sidoName']
sgg = dict_data['list'][k]['sggName']
umd = dict_data['list'][k]['umdName']
tmX = dict_data['list'][k]['tmX']
tmY = dict_data['list'][k]['tmY']
print("- 위치:{0}, {1}, {2}".format(sido, sgg, umd))
print("- k = {0}, TM 좌표(X, Y) : {1}, {2}\n".format(k, tmX, tmY))
k = 0
TM_X = dict_data['list'][k]['tmX']
TM_Y = dict_data['list'][k]['tmY']
print("TM 좌표(X, Y): {0}, {1}".format(TM_X, TM_Y))

req_url_2 = "http://openapi.airkorea.or.kr/openapi/services/rest/MsrstnInfoInqireSvc/getNearbyMsrstnList"
x_val = TM_X
y_val = TM_Y
num_of_rows_2 = 10
page_no_2 = 1
output_2 = "json"
req_params_2 = {"ServiceKey" : API_KEY_decode, "numOfRows" : num_of_rows_2, "tmX" : x_val, "tmY" : y_val,
"pageNo" : page_no_2, "numOfRows" : num_of_rows_2, "_returnType" : output_2}
dict_data_2 = requests.get(req_url_2, params = req_params_2).json()
print(dict_data_2)
print("해당 지역 근처에 있는 측정소의 개수:", dict_data_2['totalCount'])
print("측정소 정보")
for k in range(dict_data_2['totalCount']) :
stationName = dict_data_2['list'][k]['stationName']
distance = dict_data_2['list'][k]['tm']
addr = dict_data_2['list'][k]['addr']
print("- 측정소 이름 : {0}, 거리 : {1}[km]".format(stationName, distance))
print("- 측정소 주소 : {0}\n".format(addr))

req_url_3 ="http://openapi.airkorea.or.kr/openapi/services/rest/ArpltnInforInqireSvc/getMsrstnAcctoRltmMesureDnsty"

station_name = "도산대로"
data_term = "DAILY"
num_of_rows_3 = 10
page_no_3 = 1
version = 1.3
output_3 = "json"

req_params_3 = {"ServiceKey" : API_KEY_decode,
"stationName" : station_name,
"dataTerm" : data_term,
"numOfRows" : num_of_rows_3,
"ver" : version,
"pageNo" : page_no_3,
"numOfRows" : num_of_rows_3,
"_returnType" : output_3}
dict_data_3 = requests.get(req_url_3, params = req_params_3).json()
print(len(dict_data_3['list']))
for k in range(len(dict_data_3['list'])) :
so2grade = dict_data_3['list'][k]['so2Value']
pm25grade = dict_data_3['list'][k]['pm25Value']
o3grade = dict_data_3['list'][k]['o3Value']
time = dict_data_3['list'][k]['dataTime']
print("시간 : {}".format(time))
print("아황산 등급 : {}".format(so2grade))
print("미세먼지 등급 : {}".format(pm25grade))
print("오존 등급 : {}".format(o3grade))

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


공공 데이터 이용을 위한 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]))

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


공공 데이터 이용을 위한 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()
print(now)
date = "{:%Y%m%d}".format(now)
hour = "{:%H00}".format(now)
hour1 = int(hour)
print(hour1)
if (hour1 < 600) : ## 새벽에는 날씨 예보 업데이트가 안되는 것 같아서 전날 데이터로 읽어옴.
baseDate = str(int(date) - 1) ## 예보 발표 일자
else :
baseDate = date ## 예보 발표 일자
print(baseDate)

if(now.minute >= 30) :
if (now.hour == 0) :
time = "2300"
else :
if (now.hour < 10) :
time = "2300" ## 새벽에는 날씨 정보가 업데이트 안되는 것 같아서 임시로 넣음
## time = "0{0}00".format(now.hour) ==> 원래 의도했던 코드임. 10시 이전에는 앞자리에 0을 넣어줘야 해서 만듬.
else:
time = "{0}00".format(now.hour)
else :
if (now.hour == 0000) :
time = "2300"
else :
if (now.hour < 10) :
time = "2300"
#time = "0{0}00".format(now.hour)
else :
time = "{0}00".format(now.hour)
print(time)
req_url_2 = "http://apis.data.go.kr/1360000/VilageFcstInfoService/getVilageFcst"
baseTime = time ## 예보 발표 시간 지정(정시 지정이 필요함)
nx_val = 60 ## 예보 지점 x좌표(서울 종로구 사직동)
ny_val = 127 ## 예보 지점 y좌표(서울 종로구 사직동)
num_of_rows = 6 ## 한 페이지에 포함된 결과수
page_no = 1 ## 페이지 번호
output = "json" ## 응답 데이터 포멧 지정
req_param_2 = {"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_2, params = req_param_2)
dict_data = r.json()
print(dict_data)
weather_info = dict_data['response']['body']['items']['item']
print("날씨 정보 :", weather_info)

sky_condition = ["맑음", "구름조금", "구름많음", "흐림"]
rain_type = ["없음", "", "진눈개비", ""]

print(type(weather_info))
print("발표 날짜 : {}".format(weather_info[0]["baseDate"]))
print("발표 시간 : {}".format(weather_info[0]["baseTime"]))

for k in range(len(weather_info)) :
weather_item = weather_info[k]
fcstValue = weather_item['fcstValue']
if(weather_item['category'] == 'T1H') :
print('* 기온 : {} '.format(fcstValue))
elif(weather_item['category'] == 'REH') :
print('* 습도 : {} %'.format(fcstValue))
elif(weather_item['category'] == 'SKY') :
print('* 하늘 : {} '.format(sky_condition[int(fcstValue) - 1]))
elif (weather_item['category'] == 'PTY'):
print('* 강수 : {} '.format(rain_type[int(fcstValue)]))

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


+ Recent posts