카테고리 없음
문화데이터광장 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를 통하여 보여주면 된다.
반응형