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();
}
});
이제 테스트 해보면 제대로 데이터를 가져오는 걸 볼 수 있습니다.