상세 컨텐츠

본문 제목

국토교통부 전월세 실거래가 공공 API 호출해서 웹페이지에 띄워보기(2-샘플코드 파이썬3로 변환하기)

코딩공부/국토교통부 오픈 API 활용 개발

by 취미부자 직장인 고라니 2021. 6. 11. 08:54

본문

지난 포스팅에서 국토교통부 아파트 전월세 자료 API를 호출해보기 직전까지 작업을 진행했습니다

 

국토교통부 전월세 실거래가 공공 API 호출해서 웹페이지에 띄워보기(1-기본세팅)

 

국토교통부 전월세 실거래가 공공 API 호출해서 웹페이지에 띄워보기(1-기본세팅)

안녕하세요 오늘은 예전에 소개해드린 적이 있던 공공 API 중 하나를 호출해서 웹페이지에 정보를 띄워보려고 합니다~ 일단 파이썬과 플라스크를 이용할 건데요 제가 사용하는 플라스크 웹개발

goranisogul.tistory.com

 

이번에는 실제로 호출을 해볼텐데요

 

Photo by AltumCode on Unsplash

 

test.py에 공공데이터포털의 샘플코드를 입력합니다

# Python 샘플 코드 #


from urllib2 import Request, urlopen
from urllib import urlencode, quote_plus

url = 'http://openapi.molit.go.kr:8081/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcAptRent'
queryParams = '?' + urlencode({ quote_plus('ServiceKey') : '서비스키', quote_plus('LAWD_CD') : '11110', quote_plus('DEAL_YMD') : '201512' })

request = Request(url + queryParams)
request.get_method = lambda: 'GET'
response_body = urlopen(request).read()
print response_body

하지만 문제가 생겼습니다

 

국토교통부에서 제공하는 아파트 전월세 자료 API의 샘플 코드가 파이썬3에서는 작동하지 않는 점인데요

 

위 에러는 print문은 아래처럼 입력이 되어야하는데 잘못작성이 되어 있네요

 

print(response_body)

하지만 이렇게 고쳐도 아래와 같은 에러가 발생합니다

 

 

위 그림처럼 urllib2를 찾을 수 없다고하는데요

 

환경설정에 가서 모듈을 설치해보겠습니다

 

하지만 라이브러리 설치화면에서 조회해봐도 urllib2는 보이지 않네요

 

이처럼 기본 제공하는 샘플코드는 파이썬3의 문법과 맞지 않는 부분이 있고

검색해보니 라이브러리도 urllib2는 파이썬3를 지원하지 않는다고 합니다

 

파이참의 에디터에서 보면 아래 그림처럼 urllib에서도 urlencode, quote_plus가 동작하지 않는 것을 파이참에서 확인할 수 있습니다

 

위 그림을 보면 urllib2와 urllib의 import 하단에 있는 라이브러리들의 하단에 빨간 줄로

오류를 표시해주고 있습니다

 

이것을 해결하기 위해 urllib의 문서를 확인해보려고 합니다

 

구글에서 urllib을 검색하면 두번째로 표시되는 웹페이지가 urllib2의 문서인데요

여기서 해결책을 찾을 수 있을 것 같아서 들어가 찾아봤습니다

 

아래는 문서 내에서 urllib으로 검색한 결과인데

파이썬2에서 파이썬3로 자동 코드 변환하는 것이 최상위에 나와있네요

 

자동코드 변환으로 들어가보겠습니다

 

아래는 2to3라는 파이썬2에서 파이썬3로 자동으로 코드를 변환해주는 명령어에 대한 문서입니다

 

 

원본 코드가 있으면 Terminal에서 아래 명령어를 실행하면 되는 것 같은데요

 

2to3 test.py  // 변환해야하는 코드 미리보여주기
2to3 -w test.py  // 원본 코드 바로 변환하기

 

우선은 어떻게 바꿔야하는 지를 보고 두번째 명령어를 통해 수정을 해보겠습니다

 

 

보시면  

//원래 코드

from urllib2 import Request, urlopen
from urllib import urlencode, quote_plus


//변환 코드
from urllib.request import Request, urlopen
from urllib.parse import urlencode, quote_plus

 

 

이렇게 urllib의 모듈들의 위치가 변화된 것을 볼 수 있네요

 

이제는 실제로 변환해서 호출이 잘 되는 지 보겠습니다

 

아래는 2to3 명령어로 변환된 코드입니다

 

아래는 실행된 화면인데요

 

이번에는 또 다른 에러가 발생했네요

 

 

resultCode는 99

resultMsg는 SERVICE KEY IS NOT REGISTERED ERROR.

라고 표시되네요

 

등록되지 않았다니...

공식문서를 보면 두 가지를 점검하라는데요

 

1. OpenAPI 활용신청정보의 발급받은 서비스키를 다시 확인하시기 바랍니다.
2. 서비스키 값이 같다면 서비스키가 URL 인코딩 되었는지 다시 확인하시기 바랍니다.

 

1. 서비스키는 공공데이터포털에 있는 것을 그대로 복사해서 넣었으니 잘못입력되었을리는 없고

2. URL 인코딩이라는 것이 문제인 듯한데요...

 

얼른 개발을 해야하는데 아직 호출도 못하고 있다니...

공공 API가 사용하기가 참 어렵다는 생각이 듭니다

 

하지만 이런 문제들을 해결하다보면 실력이 늘어있겠죠??ㅋㅋㅋㅋ

 

다음 포스팅에서는 이 에러를 해결해보겠습니다

관련글 더보기

댓글 영역