카테고리 없음

문화데이터광장 Open API 활용하기

Wood Pecker 2021. 4. 15. 15:55

1. 문화포털 사이트(www.culture.go.kr)에는 좋은 정보가 많이 있다. 또한 Open API로 제공한다. 웹/앱에서 이를 이용하여보자.

2. 먼저 API키를 신청해서 발급받아야 한다. 

원하는 서비스(예, 역사가 있는 여행 이야기) 를 선택하고 신청하여보자. 신청하면 서비스키를 이메일로 바로 보내준다.

          ==>  key는 공공데이터포털 http://www.data.go.kr  에서 받아야된다(변경됨). 

 

 

3. 받은 서비스키를 이용하여 웹브라우저 주소창에서 직접입력하여 보자. 다음과 같이 해보자. 서비스키는 변경한다.

http://api.kcisa.kr/openapi/service/rest/convergence2019/getConver10?serviceKey=eda-e040-8494-2313&numOfRows=20&pageNo=1

4. 안드로이드 앱에서 어떤 방식으로 서비스할지를 대략적인 구성을 하여보자. 아래의 이미지를 활용하여 연필과 종이에서 화면설계를 해볼 수 있다. 출처 http://lab.naminsik.com/wp-content/uploads/2013/05/android.png?_ga=2.15438975.835794426.1618470391-327375019.1618470391

5. 다음 단계는 안드로이드에서 api를 통하여 xml를 받고 파싱을 한다.

build.gradle(Moudle)에 다음을 추가한다.   
`dependencies {`

    `implementation 'com.loopj.android:android-async-http:1.4.9'`

}

메니페스트 파일에 다음을 추가한다.

<uses-permission android:name\="android.permission.INTERNET" />  
<uses-permission android:name\="android.permission.ACCESS\_NETWORK\_STATE" />

6. 액티비티에서 다음과 같은 코드를 작성한다.


import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.RequestParams;
import cz.msebera.android.httpclient.Header;

import org.xmlpull.v1.XmlPullParserFactory;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        AsyncHttpClient client = new AsyncHttpClient();
        RequestParams params= new RequestParams();
        params.put("XML", "Dummy");
        //서비스키는 자신의 것으로 사용한다.
        String urlStr="http://api.kcisa.kr/openapi/service/rest/convergence2019/getConver10?serviceKey=6476a4e&numOfRows=20&pageNo=1";
        client.post(urlStr, params, new AsyncHttpResponseHandler() {
            @Override
            public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
                String xmlStr = new String(responseBody);
                Log.v("DEBUG", xmlStr);
                myParsing(xmlStr);
            }
           @Override
            public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
                Toast.makeText(MainActivity.this, "Connection onFailure 이벤트", Toast.LENGTH_SHORT).show();
            }
        });
   }

   void myParsing(String xmlStr) {
       XmlPullParserFactory pullParserFactory;
       try {
           XmlPullParser parser = Xml.newPullParser();
           parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
           parser.setInput(new StringReader(xmlStr));
           int eventType = parser.getEventType();

           while (eventType != XmlPullParser.END_DOCUMENT) {
               if(eventType == XmlPullParser.START_DOCUMENT) {
                   Log.v("DEBUG","Start document");
               } else if(eventType == XmlPullParser.START_TAG) {
                   String startTag= parser.getName();
                   Log.v("DEBUG","Start tag ["+parser.getName()+"]");
                   if(startTag.equals("item")){
                       Log.v("DEBUG","Start tag is item!!!!!!!");
                   }
               } else if(eventType == XmlPullParser.END_TAG) {
                   String endTag= parser.getName();
                   Log.v("DEBUG","End tag "+parser.getName());
                   if(endTag.equals("item")){
                       Log.v("DEBUG","End tag is item!!!!!!!-------------------");
                   }
               } else if(eventType == XmlPullParser.TEXT) {
                   Log.v("DEBUG","Text "+parser.getText()); // here you get the text from xml
               }
               eventType = parser.next();
           }
           Log.d("DEBUG","End document");
       } catch (XmlPullParserException e) {
           e.printStackTrace();
       } catch (Exception e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       }
   }
}

위 코드를 이용하여 XML을 파싱을 할 수 있다. 다음 단계는 정보를 객체로 만들어 ArrayList등에 저장하고 ListView 또는 RecyclerView를 통하여 보여주면 된다.

반응형