부동산 서비스 개발 - 공동주택 단지(아파트) 목록제공 서비스 API 사용법

in kr •  7 years ago  (edited)

부동산 서비스 개발

공동주택 단지(아파트) 목록제공 서비스 API 사용법


아파트 단지 정보 (세대수, 난방 구분 등) 를 수집하기 위해 아파트 코드를 수집하려고 합니다. 

아파트 코드는  '공동주택 단지 목록제공 서비스' 에서 다운받을 수 있습니다. 참고로 목록제공 API를 사용하기 위해서는   행정표준코드관리시스템(https://www.code.go.kr/)에서 조회하실 수 있는 법정동 코드나 도로명 코드가 필요합니다.

법정동 코드 수집은 예전 포스팅을 참조 부탁드립니다. 



일단 공공주택 단지 목록제공 서비스 웹페이지에 접속해봅시다. 

서비스 API는 요청 메시지는 법정동 코드를 인자로 호출하고 아파트 코드와 아파트명을 응답 메시지로 받는 간단한 구조입니다.   

api,gif



아래는 요청/ 응답 메시지 예제입니다. 



api,gif
api.gif




아래 코드는 법정동 코드를 인자로 받아서 urlib.request로 서비스 URL을 호출하여 받아온 XML 데이터를 beautifulSoup로 파싱하여 리스트로 저장하는 함수입니다. 참고로 urlopen을 했을 때 에러가 날 경우 100초 동안 멈췄다가 다시 urlopen을 시도합니다. 이렇게 하는 이유는 공공 데이터 서버의 응답이 불안정해서 간혹 프락시 에러나 Name or service not known 등의 에러가 나오기 때문입니다. 이럴 경우 조금 쉬었다 다시 하면 문제없이 데이터 수집을 계속 할 수 있습니다.

import urllib.request
from bs4 import BeautifulSoup
import time



def getaptdata(loadCode):
  key = "본인의 공공데이터 수집 키"
  url = "http://apis.data.go.kr/1611000/AptListService/getLegaldongAptList?
              loadCode="+loadCode+"&ServiceKey="+key
        try:
                f = urllib.request.urlopen(url)
        except Exception as e:
                print('Fail ' + str(e))
                time.sleep(100)
                f = urllib.request.urlopen(url)


        aptxml = f.read().decode("utf8")
        f.close()
        soup = BeautifulSoup(aptxml, "lxml")
        aptdata = []
        for item in soup.find_all("item"):
                unit = list((loadCode, item.find("kaptcode").get_text(), 
                             item.find("kaptname").get_text()))
                aptdata.append(unit)
        return(aptdata)


이렇게 받아온 결과는 아래와 같이 리스트(법정동코드, 아파트코드, 아파트이름)의 리스트로 저장이 되며 이렇게 모은 데이터 역시 테이블에 업데이트 완료 하였습니다. 이제 본격적으로 아파트 단지 상세 정보를 수집해 봅시다.

[['1111017400', 'A11077101', '창신쌍용2단지'], ['1111017400', 'A11054101', '창신두산'],
 ['1111017400', 'A11054301', '창신쌍용1단지']]






Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

Congratulations @adana! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

Award for the number of upvotes

Click on any badge to view your own Board of Honor on SteemitBoard.
For more information about SteemitBoard, click here

If you no longer want to receive notifications, reply to this comment with the word STOP

By upvoting this notification, you can help all Steemit users. Learn how here!

우왕. 운영하시는 웹사이트 들어가봤는데 시세예측까지!!!!!! 멋있어요!!!!!!!!!!

엇 웹사이트 방분까지! 감사합니다 ++ 아직 부족함이 많지만 열심히 하고있습니다 ++