티스토리 뷰
안녕하세요. Android 55.0.0 블로그입니다.
오늘은 공공데이터 API를 받아오는 부분을 알아보겠습니다.
먼저 공공데이터 홈페이지에 들어갑니다.
https://www.data.go.kr/search/index.do
데이터를 받아보기 위해서는 필수적으로 회원가입을 해야겠죠 ?
로그인을 한 후 공공데이터 포털에 접속하신 후 원하는 데이터를 검색합니다.
전체 29,000개 정도의 공공데이터가 제공되고있고 우리가 API로써 받아 볼 수 있는 것은 3,100개 가량 됩니다.
이번 포스팅에서는 *"대기오염정보" 에 대한 API 를 받아오는 부분을 만들어 보겠습니다.
상단에 활용신청을 누르시면 대부분 1분 내로 자동승인 되기 때문에 인증키를 발급받을 수 있습니다.
마이페이지에 들어가면 승인된 상태가 될껍니다.
대기오염정보 조회 API 에 접속한 후 사용방법에 대해서는 참고문서를 확인해야 하기 때문에 다운로드 받습니다.
참고문서에는 작성예시와 결과값예시가 있으니 꼭 확인해보세요.
테스트를 해볼까요 ?
해당 링크를 브라우져의 주소창에 입력하시면
이런 정보들이 나옵니다.
*참고로 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 을 파싱하기 위해 만들어진 라이브러리입니다. 참고 문헌은 아래 링크를 참고해주세요.
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 |
---|