hyeals study
오픈 API 데이터 가져오기(XML 문서) 본문
- 공공 데이터 포털에서 오픈 API인 충청북도 도시계획 현황 API(https://www.data.go.kr/data/15029351/openapi.do)를 이용해서 데이터를 가져오는 연습을 할 것
- URL을 누르게 되면 아래와 같은 창이 뜸
- 아래 사진에 나와있는 요청 주소에 들어가면
- 아래와 같은 XML문서가 나옴
◎ 여기서 가져올 데이터는 아래와 같음
- acceptDate: 접수일
- subject: 주제
- contents: 내용
- 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