방학동안 개발중인 프로젝트에서
공공데이터포털에서 여러 API를 쓰게 되었는데,
이도 기록하면 좋을 것 같아 기록으로 남겨두고자 합니다.
먼저 이용하고자 하는 서비스를 이용 신청해야하고,
승인 신청까지 완료되어야 해당 API를 이용할 수 있습니다! (위 과정은 생략)
이후 사이트에서도 보면 이용 방법에 대해 가이드가 있고
이렇게 보면 샘플데이터로도 쉽게 확인할 수 있습니다!
또한, API 활용 문서에서를 참고하면
더 자세한 정보를 알 수 있습니다.
API를 이용한 예제코드는 다음과 같습니다.🙆🏻♀️
Key값은 발급받은 인증키값을 넣어주시면 됩니다.
url뒤에 해당 파라미터를 한 번에 넣어줬는데,
실제 개발시에는 파라미터를 따로 분리하고 정의해서 넣어주면 되겠죠?
def VilageFcstInfoService():
encodingKey = "{인코딩 key값}"
decodingKey = "{디코딩 key값}"
# request url 정의
url = "http://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/getVilageFcst?ServiceKey=" + encodingKey + "&pageNo=1&numOfRows=1000&dataType=XML&base_date=20220802&base_time=0200&nx=60&ny=127"
request = urllib.request.Request(url)
# request 요청
response = urllib.request.urlopen(request)
# response 결과
rescode = response.getcode()
if (rescode == 200): # 요청 결과 성공시에만
response_body = response.read()
res = xml.dom.minidom.parseString(response_body.decode('utf-8'))
pretty_res = res.toprettyxml()
print(pretty_res)
else: # 실패시 -> 에러코드 출력
print("Error Code:" + rescode)
이에대한 요청 결과는 다음과 같습니다! (너무 길어서 일부분만 첨부하겠습니다.)
<response>
<header>
<resultCode>00</resultCode>
<resultMsg>NORMAL_SERVICE</resultMsg>
</header>
<body>
<dataType>XML</dataType>
<items>
<item>
<baseDate>20220802</baseDate>
<baseTime>0200</baseTime>
<category>TMP</category>
<fcstDate>20220802</fcstDate>
<fcstTime>0300</fcstTime>
<fcstValue>27</fcstValue>
<nx>60</nx>
<ny>127</ny>
</item>
<item>
<baseDate>20220802</baseDate>
<baseTime>0200</baseTime>
<category>UUU</category>
<fcstDate>20220802</fcstDate>
<fcstTime>0300</fcstTime>
<fcstValue>-0.6</fcstValue>
<nx>60</nx>
<ny>127</ny>
</item>
<item>
<baseDate>20220802</baseDate>
<baseTime>0200</baseTime>
<category>VVV</category>
<fcstDate>20220802</fcstDate>
<fcstTime>0300</fcstTime>
<fcstValue>3.5</fcstValue>
<nx>60</nx>
<ny>127</ny>
</item>
<item>
<baseDate>20220802</baseDate>
<baseTime>0200</baseTime>
<category>VEC</category>
<fcstDate>20220802</fcstDate>
<fcstTime>0300</fcstTime>
<fcstValue>169</fcstValue>
<nx>60</nx>
<ny>127</ny>
</item>
<item>
<baseDate>20220802</baseDate>
<baseTime>0200</baseTime>
<category>WSD</category>
<fcstDate>20220802</fcstDate>
<fcstTime>0300</fcstTime>
<fcstValue>3.6</fcstValue>
<nx>60</nx>
<ny>127</ny>
</item>
<item>
<baseDate>20220802</baseDate>
<baseTime>0200</baseTime>
<category>SKY</category>
<fcstDate>20220802</fcstDate>
<fcstTime>0300</fcstTime>
<fcstValue>4</fcstValue>
<nx>60</nx>
<ny>127</ny>
</item>
<item>
<baseDate>20220802</baseDate>
<baseTime>0200</baseTime>
<category>PTY</category>
<fcstDate>20220802</fcstDate>
<fcstTime>0300</fcstTime>
<fcstValue>1</fcstValue>
<nx>60</nx>
<ny>127</ny>
</item>
<item>
<baseDate>20220802</baseDate>
<baseTime>0200</baseTime>
<category>POP</category>
<fcstDate>20220802</fcstDate>
<fcstTime>0300</fcstTime>
<fcstValue>60</fcstValue>
<nx>60</nx>
<ny>127</ny>
</item>
<item>
<baseDate>20220802</baseDate>
<baseTime>0200</baseTime>
<category>WAV</category>
<fcstDate>20220802</fcstDate>
<fcstTime>0300</fcstTime>
<fcstValue>0</fcstValue>
<nx>60</nx>
<ny>127</ny>
</item>
<item>
<baseDate>20220802</baseDate>
<baseTime>0200</baseTime>
<category>PCP</category>
<fcstDate>20220802</fcstDate>
<fcstTime>0300</fcstTime>
<fcstValue>1.0mm</fcstValue>
<nx>60</nx>
<ny>127</ny>
</item>
<item>
<baseDate>20220802</baseDate>
<baseTime>0200</baseTime>
<category>REH</category>
<fcstDate>20220802</fcstDate>
<fcstTime>0300</fcstTime>
<fcstValue>90</fcstValue>
<nx>60</nx>
<ny>127</ny>
</item>
<item>
<baseDate>20220802</baseDate>
<baseTime>0200</baseTime>
<category>SNO</category>
<fcstDate>20220802</fcstDate>
<fcstTime>0300</fcstTime>
<fcstValue>적설없음</fcstValue>
<nx>60</nx>
<ny>127</ny>
</item>
<item>
<baseDate>20220802</baseDate>
<baseTime>0200</baseTime>
<category>TMP</category>
<fcstDate>20220802</fcstDate>
<fcstTime>0400</fcstTime>
<fcstValue>27</fcstValue>
<nx>60</nx>
<ny>127</ny>
</item>
<item>
<baseDate>20220802</baseDate>
<baseTime>0200</baseTime>
<category>UUU</category>
<fcstDate>20220802</fcstDate>
<fcstTime>0400</fcstTime>
<fcstValue>-0.5</fcstValue>
<nx>60</nx>
<ny>127</ny>
</item>
<item>
<baseDate>20220802</baseDate>
<baseTime>0200</baseTime>
<category>VVV</category>
<fcstDate>20220802</fcstDate>
<fcstTime>0400</fcstTime>
<fcstValue>3.3</fcstValue>
<nx>60</nx>
<ny>127</ny>
</item>
...
이제는 활용 용도에 맞게 위 데이터를 잘 파싱하여 데이터를 잘 가공해야 합니다.
이에 대한 내용도 천천히 정리해서 남겨두도록 하겠습니다
날씨 API에 대한 더 자세한 이용과 해당 API 정보는 제 깃헙에도 올려두었습니다
필요하면 참고하세요
https://github.com/ssssujini99/weatherAPI