상세 컨텐츠

본문 제목

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

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

by 취미부자 직장인 고라니 2021. 6. 16. 15:13

본문

 

 

국토교통부 전월세 실거래가 공공 API 호출해서 웹페이지에 띄워보기는 완성할 때까지 연재됩니다.

 

(지난 이야기)

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

 

 

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

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

goranisogul.tistory.com

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

 

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

지난 포스팅에서 국토교통부 아파트 전월세 자료 API를 호출해보기 직전까지 작업을 진행했습니다 국토교통부 전월세 실거래가 공공 API 호출해서 웹페이지에 띄워보기(1-기본세팅) 국토교통부

goranisogul.tistory.com

 

 


맞습니다

 

2번째 글을 쓰고 API 호출에서

SERVICE KEY IS NOT REGISTERED ERROR. 라는

무시무시한 에러메세지를 받고 5일이 흘렀습니다

 

그 사이에 저는 이미 많은 부분에서 발전이 있었고

이미 상당부분 개발이 진행되었습니다

 

아래 사이트가 바로 제가 만든 전월세 실거래가 조회 사이트 입니다

 

http://goranisogul.shop 

 

대리만족 | 전월세 실거래가 조회

전월세 실거래가 조회 검색하고 싶은 지역을 입력하신 후 조회하기를 눌러주세요

goranisogul.shop

 

접속해보셔도 좋지만 들어가보기 싫으신 분들을 위해

이미지로도 준비했습니다

 

대충 이런 모습입니다

 

그럼 이제부터 여기까지 개발을 진행하면서 제가 기록해놓은 것들을 바탕으로

글을 이어가겠습니다

 

우선 2편에 이어서 말씀드리자면

국토교통부_아파트 전월세 자료 API를 호출했을 때 나오던

SERVICE KEY IS NOT REGISTERED ERROR.

이 에러메세지는 결국 시간이 해결해주는 것이었어요

 

제가 API를 신청했던 것이 6월 11일 오후 6시 경

마지막으로 에러메세지를 본 것이 오후 5시반 경이었습니다

 

회사를 퇴근한 직후에 다시 시도해봤을 때는 호출이 되더라구요..

 

공공데이터포털의 미리보기로 호출해본 API

 

 

결국 이 API는 24시간을 기다려야 실제 호출이 되는 경우도 있으니

만약 국토교통부_아파트 전월세 자료 API를 이용해 개발하려는 분이 있으시다면

꼭 미리미리 API 사용신청을 해두시기 바래요..

 

그리고 혹시나 인코딩 문제로 똑같은 에러메세지가 뜰 수 있으니

서비스키는 일반인증키(Decoding)을 이용하시길 권장드립니다

그래야 불필요한 코드를 줄일 수 있습니다

 

암튼 이제 호출이 되니까 호출을 해볼게요

 

 

2편의 마지막 상황이 바로 위와 같이 파이썬2로 작성되어 있는 샘플코드를 2to3 명령어를 통해

파이썬3것으로 바꾸고 queryPrams 변수를 보기좋게 정리한 것이었는데요

 

이 코드를 실행해보겠습니다

 

보시는 것처럼 resultCode가 00으로 뜨고 비록 예쁘게는 안뜨지만

이렇게 호출이 되는 것을 확인할 수 있네요

 

ㅇ..일.단 성공!!!

 

 

그리고 국토교통부_아파트 전월세 자료 API는 보시는 것처럼 xml로 정보를 제공합니다

 

이 정보를 가공해서 활용하기 위해 일단 JSON 형태로 바꿔보겠습니다

 

먼저 json을 쓰기 위해 xml을 딕셔너리 형태로 담는 xmltodict 모듈을 설치해주고

그것을 json 라이브러리와 조금전에 설치한 xmltodict를 import 해줍니다

xmltodict 설치

 

import json
import xmltodict

 

 

 

다음으로 response_body를 jsonString이라는 변수를 생성하여 json 형태로 담아볼게요

 

jsonString = json.loads(json.dumps(xmltodict.parse(response_body), ensure_ascii=False))

 

코드를 풀어보자면

xmltodict.parse(response_body)는 xml형태의 데이터를 딕셔너리형태로 변환합니다

ensure_ascii=False의 경우 한글이 변환되는 과정에서 인코딩 에러가 나는 것을 방지하기 위한 내용인데

그냥 관용적으로 사용하는 것이라 저도 자세한 내용은 모르겠네요

 

그다음으로 이제 json 형태로 메모리에 담는 내용인데요

json.dumps() 이 코드는 딕셔너리를 json으로 메모리에 저장하는 내용입니다

만약 별도의 json 파일을 생성해서 작업할 거라면 json.dump() 로 s를 빼고 쓰시면 됩니다

하지만 우리는 그냥 메모리에 잠시 담는 정도면 충분하기 때문에 json.dumps()를 만들게요

그 다음으로 json을 로드하는 json.loads입니다

 

그럼 jsonString을 print함수로 표시해볼게요

 

print(jsonString)

 

위 이미지에서 보시는 것처럼 xml 형태로 표시되던 데이터가 json으로 표시되는 걸 볼 수 있네요

우리가 원하는 데이터는 response - body - items - item 에 들어있는 것을 알 수 있네요

item 안에서는 리스트 형태로 복수의 자료를 제공하고 있습니다

 

그럼 오늘은 이 item까지만 호출해보겠습니다

 

먼저 results라는 새로운 변수를 만들고 그 안에 item 리스트를 담아볼게요

 

results = jsonString['response']['body']['items']['item']
print(results)

 

출력해보면 리스트만 표시되는 것을 알 수 있습니다

이제 모든 결과를 보기좋게 표시하기 위해

반복문으로 표시해볼게요

 

for i in range(len(results)) :
    result = results[i]
    print(result)

 

results의 리스트 자료 개수를 구하는 것은 len()함수로 하고 range()를 통해 int형으로 변환했습니다

그리고 자료를 하나씩 담을 result라는 변수를 다시 생성하고 그 안에 results[i] 를 담아 i번째 자료를 담습니다

 

실행결과는 아래와 같습니다

아름답군요...

 

이번 포스팅은 여기서 마치고

다음 포스팅에서는 이렇게 api를 호출하는 코드를 함수로 만들고 app.py에서 가져오는 것으로 만들어보겠습니다

 

 

관련글 더보기

댓글 영역