[Django/개발일지] Django에서 공공데이터 API 이용하기

이수진·2022년 8월 1일
0
post-thumbnail

방학동안 개발중인 프로젝트에서
공공데이터포털에서 여러 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

profile
꾸준히, 열심히, 그리고 잘하자

0개의 댓글