본문 바로가기

[Kotlin]

[Kotlin] 공공API 가져오기

반응형
이전 블로그에서 가져온 글입니다. (2019.9.18)

회사에서 인턴하게 되었는데 첫작업이 공공API에서 데이터 가져오는 일이 되었다.

 

언어는 코틀린. 물론 난 이때 이 언어를 처음 접함

 

크롤링도 안해봤고 코틀린도 안해봐서 코드 짜는데 좀 걸렸다.

 

공공데이터포털에서 건축물대장 데이터를 사용

 

건축물대장 API결과

\(ㅇㅁㅇ)/

당연히 많은 데이터를 나한테 주지만, 나한테 필요한 정보는 아래 녀석들이다

  1. SigunguCd = 행정표준코드 / 시군구코드
  2. BjdongCd = 행정표준코드 / 법정동코드
  3. bun + ji = 번지
  4. atchSigunguCd = 부속시군구코드
  5. atchBjdongCd = 부속법정동코드
  6. atchBun + atchJi = 부속번지

코드 

위의 것들은 실제 xml 태그명으로 사용된 항목들임으로 이것들을 잘 모아서 아래 코드를 짠! 하고 작성

 

코드를 아주 조금 설명하자면... 주석으로 하자

 

import org.w3c.dom.Document
import org.w3c.dom.Node
import org.w3c.dom.NodeList
import org.w3c.dom.Element
import javax.xml.parsers.DocumentBuilder
import javax.xml.parsers.DocumentBuilderFactory


fun main() {


    //api 를 신청하게되면 접근할 수 있도록 키값을 준다. 그거 ㄱㄱ
    val key : String = "키값"
    //api 정보를 가지고 있는 주소
    var url : String="http://apis.data.go.kr/1611000/BldRgstService/getBrAtchJibunInfo?sigunguCd=11680&bjdongCd=10300&serviceKey="+key
    //기본적으로 xml형태를 가지게 된다. xml을 파싱하기 위한 코드.
    //만약 본인은 json으로 해야한다! 싶으면 url 끝에 &_type=json 사용. 물론 내 코드에는 안된다.
    val xml : Document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(url)


    xml.documentElement.normalize()
    println("Root element : "+xml.documentElement.nodeName)
    
    //찾고자 하는 데이터가 어느 노드 아래에 있는지 확인
    val list:NodeList=xml.getElementsByTagName("item")


    for(i in 0..list.length-1){
        var n:Node=list.item(i)
        if(n.getNodeType()==Node.ELEMENT_NODE){
            val elem=n as Element
            val map=mutableMapOf<String,String>()


            for(j in 0..elem.attributes.length - 1)
            {
                map.putIfAbsent(elem.attributes.item(j).nodeName, elem.attributes.item(j).nodeValue)
            }
            //list.length-1 (건축물 대장의 경우 디폴트 = 10)만큼 얻고자 하는 태그의 정보를 가져온다
            println("=========${i+1}=========")
            println("1. 법정동코드 : ${elem.getElementsByTagName("bjdongCd").item(0).textContent}")
            println("2. 시군구코드 : ${elem.getElementsByTagName("sigunguCd").item(0).textContent}")
            println("3. 번지 : ${elem.getElementsByTagName("bun").item(0).textContent}"+"${elem.getElementsByTagName("ji").item(0).textContent}")
            println("4. 부속법정동코드 : ${elem.getElementsByTagName("atchBjdongCd").item(0).textContent}")
            println("5. 부속시군구코드 : ${elem.getElementsByTagName("atchSigunguCd").item(0).textContent}")
            println("6. 부속번지 : ${elem.getElementsByTagName("atchBun").item(0).textContent}"+"${elem.getElementsByTagName("atchJi").item(0).textContent}")


        }
    }
}

결과

\\(ㅇㅁㅇ)/ (2)

728x90

'[Kotlin]' 카테고리의 다른 글

[Kotlin] JSON 파싱하기  (0) 2022.05.08