관리 메뉴

hyeals study

오픈 API 데이터 가져오기(XML 문서) 본문

안드로이드

오픈 API 데이터 가져오기(XML 문서)

hyeals 2020. 5. 12. 23:37

- 공공 데이터 포털에서 오픈 API인 충청북도 도시계획 현황 API(https://www.data.go.kr/data/15029351/openapi.do)를 이용해서 데이터를 가져오는 연습을 할 것

 


- URL을 누르게 되면 아래와 같은 창이 뜸

 

 


- 아래 사진에 나와있는 요청 주소에 들어가면

 


- 아래와 같은 XML문서가 나옴

 

 

◎ 여기서 가져올 데이터는 아래와 같음

  1. acceptDate: 접수일
  2. subject: 주제
  3. contents: 내용 
  4. title: 제목

 

* xml에서 데이터를 가져오기 위해서 태그이름으로 접근하면 됨


- 네트워크를 사용하기 때문에 AndroidManifest.xml에 아래와 같은 코드를 추가함 

(인터넷 사용 권한을 허용하는 것)

 

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

- activity_main.xml의 레이아웃을 디자인함

 

 


[MainActivity.kt]

 

* 코드 설명은 주석

 

package com.example.chcungbukcityplan

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView
import kotlinx.android.synthetic.main.activity_main.*
import org.w3c.dom.Element
import java.lang.Exception
import java.net.URL
import javax.xml.parsers.DocumentBuilderFactory

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        var textView = findViewById<TextView>(R.id.textView)

        textView.text = ""

		// 버튼을 누르면 쓰레드 가동
        button.setOnClickListener {
            var thread = NetworkThread()
            thread.start()
        }
    }

    inner class NetworkThread: Thread(){
        override fun run() {
            try {
            	// 접속할 페이지의 주소
                var site = "http://www.chungbuk.go.kr/openapi-data/service/cityplan/cityplan"
                var url = URL(site)
                var conn = url.openConnection()
                var input = conn.getInputStream()

                var factory = DocumentBuilderFactory.newInstance()
                var builder = factory.newDocumentBuilder()
                // doc: xml문서를 모두 읽어와서 분석을 끝냄
                var doc = builder.parse(input)

                // root: xml 문서의 모든 데이터들을 갖고 있는 객체
                var root = doc.documentElement

				// xml 문서에서 태그 이름이 item인 태그들이 item_node_list에 리스트로 담김
                var item_node_list = root.getElementsByTagName("item")

				// item_node_list에 들어있는 태그 객체 수만큼 반복함
                for(i in 0 until item_node_list.length){
                    // i번째 태그 객체를 item_element에 넣음
                    var item_element = item_node_list.item(i) as Element
					
                    // item태그 객체에서 원하는 데이터를 태그이름을 이용해서 데이터를 가져옴
                    // xml 문서는 태그 이름으로 데이터를 가져오면 무조건 리스트로 나옴
                    var acceptDate_list = item_element.getElementsByTagName("acceptDate")
                    var subject_list = item_element.getElementsByTagName("subject")
                    var contents_list = item_element.getElementsByTagName("contents")
                    var title_list = item_element.getElementsByTagName("title")


                    var acceptData_node = acceptDate_list.item(0) as Element
                    var subject_node = subject_list.item(0) as Element
                    var contents_node = contents_list.item(0) as Element
                    var title_node = title_list.item(0) as Element

					// 태그 사이에 있는 문자열을 가지고 오는 작업
                    var acceptData = acceptData_node.textContent
                    var subject = subject_node.textContent
                    var contents = contents_node.textContent
                    var title = title_node.textContent

					// Ui에 데이터를 출력해주는 부분
                    runOnUiThread {
                        textView.append("접수일 : ${acceptData}\n")
                        textView.append("주제: ${subject}\n")
                        textView.append("내용 : ${contents}\n")
                        textView.append("제목: ${title}\n\n")

                    }
                }
            }catch (e: Exception){
                e.printStackTrace()
            }
        }
    }
}

 

 


[실행 화면]

 

- 버튼을 누르면 아래와 같이 XML문서에 있는 데이터를 가져와서 출력함

 

* 스크롤 뷰를 이용했기 때문에 화면을 스크롤하면 나머지 데이터들이 보임

 

'안드로이드' 카테고리의 다른 글

웹툰 바로가기 앱  (0) 2020.05.24
오픈 API 데이터 가져오기(JSON 문서)  (0) 2020.05.17
webView 사용해보기  (0) 2020.05.11
RecyclerView 사용법  (0) 2020.05.11
인스타그램 클론 (알람 리스트 페이지)  (2) 2020.04.15
Comments