Computer/Java, Kotlin

Android에서 네이버 검색 API 사용하기

kentakang 2018. 6. 1. 02:57
반응형

Android에서 네이버 검색 API 사용하기


본 글의 내용은 안드로이드에서 네이버 검색 API를 통해 XML을 받아온 뒤, 해당 내용을 가공해서 출력하는 과정입니다.

본 글을 따라서 진행하기 전에 네이버 개발자 센터에서 애플리케이션을 등록하신 뒤, Client ID와 Client Secret을 준비해두셔야 합니다.


XML 가져오기


네이버 개발자 센터에 나와있는 Java 예제 코드는 안드로이드에서는 사용이 불가능 한 코드입니다.

안드로이드에서 네트워크 연결을 위해서는 Thread를 별도 생성해서 처리해줘야 합니다.

우선 검색어를 입력하면 해당 검색어를 통해 검색한 백과사전 데이터를 String 자료형으로 return 해주는 코드를 작성하겠습니다.


public String getNaverSearch(String keyword) {

String clientID = "사용자의 클라이언트 ID 값";
String clientSecret = "사용자의 클라이언트 시크릿 값";

try {
String text = URLEncoder.encode(keyword, "UTF-8");
String apiURL = "https://openapi.naver.com/v1/search/encyc.xml?query=" + text;

StringBuffer sb = new StringBuffer();


URL url = new URL(apiURL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("X-Naver-Client-Id", clientID);
conn.setRequestProperty("X-Naver-Client-Secret", clientSecret);

XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
xpp = factory.newPullParser();
String tag;
xpp.setInput(new InputStreamReader(conn.getInputStream(), "UTF-8"));

xpp.next();
int eventType = xpp.getEventType();

while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_TAG:
tag = xpp.getName();

if (tag.equals("item"));
else if (tag.equals("title")) {

sb.append("제목 : ");

xpp.next();
if (!xpp.getText().contains("encyc"))
sb.append(xpp.getText().replaceAll("<(/)?([a-zA-Z]*)(\\\\s[a-zA-Z]*=[^>]*)?(\\\\s)*(/)?>", ""));

}
else if (tag.equals("description")) {

sb.append("내용 : ");
xpp.next();
if (!xpp.getText().contains("Naver Search Result"))
sb.append(xpp.getText().replaceAll("<(/)?([a-zA-Z]*)(\\\\s[a-zA-Z]*=[^>]*)?(\\\\s)*(/)?>", ""));
}
break;
}

eventType = xpp.next();

return sb.toString();

}

} catch (Exception e) {
return e.toString();

}
}


위 코드는 XmlPullParser를 통해 XML을 파싱하고 <title> 태그 안에 있는 제목들은 앞에 제목 : 을 붙여 StringBuffer에 append하고,

<description> 태그에 있는 내용들은 앞에 내용 : 을 붙여 StringBuffer에 append 한 뒤, StringBuffer를 String으로 변환해 return하는 코드입니다.

위 메소드를 통해 네이버 API에서 데이터를 받아오고, 해당 데이터를 문자열로 가공해서 사용할 수 있습니다.

데이터를 받아오고 가공하는 메소드를 만들었으니 이제는 가공한 데이터를 TextView에 표시해주는 코드를 작성해보도록 하겠습니다.


가공한 데이터 TextView에 표시


이제 가공한 데이터를 TextView에 표시하겠습니다.

저는 검색어를 입력하는 EditText (id : searchText), 검색 버튼 (id : searchBtn), 가져온 데이터를 표시하는 TextView (id : searchResult) 를 사용했습니다. 또한 검색어를 입력 받을 String 변수 keyword와 받아온 문자열을 저장할 String 변수 str을 메소드 밖에 선언해두었습니다.


searchBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
keyword = searchText.getText().toString();

new Thread(new Runnable() {
@Override
public void run() {
str = getNaverSearch(keyword);


runOnUiThread(new Runnable() {
@Override
public void run() {
searchText.setText(str);

}
});
}
}).start();
}
});


이제 테스트 해보면 제대로 데이터를 가져오는 걸 볼 수 있습니다.

반응형