티스토리 뷰

안녕하세요. Android 55.0.0 블로그입니다.

 

오늘은 공공데이터 API를 받아오는 부분을 알아보겠습니다.

 

 

먼저 공공데이터 홈페이지에 들어갑니다.

https://www.data.go.kr/search/index.do

 

공공데이터포털

국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Dataset)와 Open API로 제공하는 사이트입니다.

www.data.go.kr

데이터를 받아보기 위해서는 필수적으로 회원가입을 해야겠죠 ?

 

로그인을 한 후 공공데이터 포털에 접속하신 후 원하는 데이터를 검색합니다.

 

전체 29,000개 정도의 공공데이터가 제공되고있고 우리가 API로써 받아 볼 수 있는 것은 3,100개 가량 됩니다.

 

 

이번 포스팅에서는 *"대기오염정보" 에 대한 API 를 받아오는 부분을 만들어 보겠습니다.

*대기오염정보

 

상단에 활용신청을 누르시면 대부분 1분 내로 자동승인 되기 때문에 인증키를 발급받을 수 있습니다.

 

마이페이지에 들어가면 승인된 상태가 될껍니다.

 

대기오염정보 조회 API 에 접속한 후 사용방법에 대해서는 참고문서를 확인해야 하기 때문에 다운로드 받습니다.

 

참고문서에는 작성예시와 결과값예시가 있으니 꼭 확인해보세요.

 

 

 

테스트를 해볼까요 ?

 

http://openapi.airkorea.or.kr/openapi/services/rest/MsrstnInfoInqireSvc/getNearbyMsrstnList?tmX=244148.546388&tmY=412423.75772&pageNo=1&numOfRows=10&ServiceKey=서비스키

 

해당 링크를 브라우져의 주소창에 입력하시면

 

이런 정보들이 나옵니다.

 

*참고로 XML 형식이 아닌 Json 방식으로 받으시려면

 

http://openapi.airkorea.or.kr/openapi/services/rest/MsrstnInfoInqireSvc/getNearbyMsrstnList?tmX=244148.546388&tmY=412423.75772&pageNo=1&numOfRows=10&ServiceKey=서비스키&_returnType=json

를 붙여주면 됩니다.

 

이걸 이제 안드로이드에서 받아와볼까요 ?

 

1. 프로젝트 생성하기

2. Jsoup 이란 ?

3. Jsoup Library implementation 하기

4. AsyncTask 를 사용하는 이유

5. 인터넷 연결하기

6. AsyncTask 와 Jsoup 을 이용해 접속하기

 

순서로 알아보겠습니다.

 

1. 프로젝트 생성하기

빈 프로젝트를 생성합니다.

 

 

2. Jsoup 이란 ?

 

Jsoup 이란 Java 에서 HTML 을 파싱하기 위해 만들어진 라이브러리입니다. 참고 문헌은 아래 링크를 참고해주세요.

https://jsoup.org/

 

jsoup Java HTML Parser, with best of DOM, CSS, and jquery

jsoup: Java HTML Parser jsoup is a Java library for working with real-world HTML. It provides a very convenient API for extracting and manipulating data, using the best of DOM, CSS, and jquery-like methods. jsoup implements the WHATWG HTML5 specification,

jsoup.org

3. Jsoup 추가하기

Build.Gradle(Modul.app) 을 더블클릭합니다.

 

해당 화면이 나오면 하단에 dependencies { } 부분이 있습니다.

 

해당 부분에 

implementation 'org.jsoup:jsoup:1.11.3'

를 추가한 후 Sync Now 를 클릭하면 알아서 Jsoup 을 받아서 Lib 에 추가해줍니다.

 

Jsoup을 추가했다면 MainActivity.Java 파일에 들어가서 확인해 볼 수 있습니다.

 

Jsoup 이라고 치면 자동완성이 되는부분을 확인하실 수 있습니다.

 

4. AsyncTask 를 사용하는 이유.

 

Android MainActivity.Java Class 에서 인터넷 연결을 코딩하게되면 에러가 발생하게 됩니다.

이는 쓰레드와 핸들러의 개념을 이해해야 하는데, 해당 부분은 차후 포스팅에서 설명할 수 있도록 하겠습니다.

무튼 우리는 UI 쓰레드와 충돌이 나지 않게 하기위해서 AsyncTask 를 사용하여 Background 딴에서 인터넷을 연결해야 하기 때문에 

이 AsyncTask를 사용해서 인터넷에 접속해보겠습니다.

 

5. 인터넷 연결하기

 

인터넷 연결은 쉽습니다.

App -> Menifest 를 더블클릭합니다.

이런 소스코드가 나오게 되는데

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.webpasser">
    <uses-permission android:name="android.permission.INTERNET"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

이 부분을 추가해주면 됩니다.

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

이제 인터넷 연결을 할 수 있습니다. 참 쉽죠 ?

 

 

 

6. AsyncTask 와 Jsoup을 이용하기

 

연결할 주소를 String 값으로 저장합니다.

public class MainActivity extends AppCompatActivity {
	String html = "http://openapi.airkorea.or.kr/openapi/services/rest/MsrstnInfoInqireSvc/getNearbyMsrstnList?tmX=244148.546388&tmY=412423.75772&pageNo=1&numOfRows=10&ServiceKey=서비스키"
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

 

AsyncTask를 사용하기위해 Import 합니다.

import android.os.AsyncTask;

 

AsyncTask 클래스 부분을 생성합니다.

// JsoupAsyncTask 는 클래스 명 임으로 임의로 설정해도 되는 부분입니다.
public class JsoupAsyncTask extends AsyncTask<Void, Void, Void> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
        }

        @Override
        protected void onProgressUpdate(Void... values) {
            super.onProgressUpdate(values);
        }

        @Override
        protected Void doInBackground(Void... voids) {
            return null;
        }
    }

이 중 우리는 doInBackground(Void... voids) 부분의 메소드만 사용하겠습니다.

 

Jsoup을 사용하기 위해서는 Jsoup을 Import 해줘야겠죠 ?

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class JsoupAsyncTask extends AsyncTask<Void, Void, Void> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
        }

        @Override
        protected void onProgressUpdate(Void... values) {
            super.onProgressUpdate(values);
        }

        @Override
        protected Void doInBackground(Void... voids) {
            try {
                Document document = Jsoup.connect(html).get();
                log.D("TAG", "Msg : " + document);
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
    }

자 그럼 이제 앱을 실행하게되면 하단에 Logcat부분에 TAG 부분을 검색하게되면 

접속이 되었는지 API를 어떻게 받아왔는지 볼 수 있습니다.

 

이제 데이터를 받아왔으니 가공하는 부분을 다음 포스팅에서 알아보도록 하죠.

'Android' 카테고리의 다른 글

[Android/안드로이드] Json Type 이란 무엇인가 ?  (1) 2019.03.27
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함