본문 바로가기
개발일지/부동산 서비스

[개발일지] 공공데이터포털에서 아파트 목록 open api 호출하기

by GreatCoding 2024. 1. 14.

목표

부동산 시세 공부를 위해 네이버 부동산, 호갱노노 같은 부동산 서비스를 개발해보도록 하자.

일단 목표는? 지도에 마커로 아파트 시세를 표현해주는것을 목표로 해보자.

 

그럼, 아파트 목록을 수집해야할텐데 어디서 갖고 와야할까?
이곳 저곳 검색해보니 역시 공공데이터포털(https://www.data.go.kr)이 나오더라. 전산화가 잘 되있는 우리나라에 감사할따름.

많은 공공 api 중에 어떤걸 사용해야할까?

 

공공데이터포털에서 open api 호출하기

검색해보니 국토교통부에서 제공하는 공동주택 단지 목록제공 서비스 (https://www.data.go.kr/data/15057332/openapi.do)가 있구나!

 

일단 한번 호출해볼까? 필수값은 서비스키와 시도코드이다.

서비스키는 공공데이터포털(https://www.data.go.kr)에 가입을 하고 api 페이지(https://www.data.go.kr/data/15057332/openapi.do)에서 "활용신청" 버튼만 누르면 자동으로 바로 승인이 된다.
request와 response뿐만 아니라 여러 언어로 샘플코드도 제공해주니 바로 시도해보자.

 

일단 나는 실행가능한 슈도코드인 파이썬3으로 실행해보았다.
파이썬3 다운로드 페이지(https://www.python.org/downloads/)에서 설치 후 아래의 샘플 코드를 실행하면 된다.
코드 중간의 서비스키는 자신이 발급받은 키로 대체하자.

 

import requests  

url = 'http://apis.data.go.kr/1613000/AptListService2/getSidoAptList'  
params ={'serviceKey' : '서비스키', 'sidoCode' : '27', 'pageNo' : '1', 'numOfRows' : '10' }  

response = requests.get(url, params=params)  
print(response.content)

 

 

 

Download Python

The official home of the Python Programming Language

www.python.org

한글 인코딩

바로 xml로 된 응답이 오는데, 한글이 \xeb\x8c\x80\xea\xb5\xac\xea\xb4\x91\xec\x97\xad\xec\x8b\x9c 와 같이 한국인은 읽을 수 없게 온다.

응 그래. 영어 안쓰는게 죄지. 그래서 인코딩/디코딩 문제인건 알겠는데 어떻게 해야하나 하고 해결책을 찾아보니,
마지막 줄만 다음과 같이 바꿔서 출력 직전에 utf-8로 바꿔주면 된단다.

 

print(response.content.decode('utf-8'))

 

오호, 이제 대구광역시라는 나도 아는 한글이 나오는구나.
아 근데 내가 대구에 살질 않아서 서울 부동산 정보를 보고 싶은데...
요청의 필수 값이였던 sidoCode를 27대신 다른 값으로 바꿔줘야겠구나.
sidoCode는 어디서 받아야지? 라고 구글에 물어보니 바로 통계청의 통계지리정보서비스(https://sgis.kostat.go.kr/developer/html/openApi/api/dataCode/SidoCode.html) 에 정리된 페이지를 갖다주는 구글신. 사랑합니다.
페이지네이션으로 나눠서 볼것도 아니니깐 리퀘스트 파라메터를 다음과 같이 바꾸자.

 

params ={'serviceKey' : '서비스키', 'sidoCode' : '11', 'pageNo' : '1', 'numOfRows' : '99999' }  

 

99999개를 넣었지만, 2024년 1월 기준, 서울 아파트는 3006개인가보다.
api 페이지 (https://www.data.go.kr/data/15057332/openapi.do) 출력결과 항목에 정리된대로 시도, 시군구, 읍면동, 리, 법정동코드, 단지코드, 단지명 순으로 xml 데이터가 좌르르 내려온다.

 

xml 보단 dict지! xmltodict 패키지 설치

xml보단 dict가 다루기 편하니 커맨드라인에서 아래의 명령어로 xmltodict를 설치하여 변환하도록 하자

 

pip install xmltodict

 

 

xmltodict

Makes working with XML feel like you are working with JSON

pypi.org

 

최종 코드

아파트 목록을 갖고와서 화면에 출력하는 파이썬3로 작성된 최종 코드는 다음과 같다.

 

import requests  

url = 'http://apis.data.go.kr/1613000/AptListService2/getSidoAptList'  
params = {'serviceKey': SERVICE_KEY, 'sidoCode': '11', 'numOfRows' : '999999'}  

response = requests.get(url, params=params)  

import xmltodict  

apt_list = xmltodict.parse(response.content.decode('utf-8'))  
print(apt_list)

 

마치며

다음 목표는 데이터를 DB에 저장하고 다른 추가 데이터와 연관시키는 작업을 해보도록 하겠다.
도중에 포기하지 않도록 많은 응원과 관심 부탁드린다.

혹시 잘못된 방향에 대한 질타나, 더 좋은 방법에 대한 피드백은 양손들고 환영한다, 그럼 계속!

댓글