본문 바로가기
Developer/Android, Java

[안드로이드] 네이버 검색 API 사용 예제

by Doony 2019. 1. 7.

이번 포스팅에서는 네이버 검색 API를 안드로이드에서 사용하는 방법에 대해 알아보자. 

네이버 검색 API란?

블로그나 지역 검색 등 네이버에서 주로 사용하는 검색 정보를 띄워주는 API이다. 최근에 본 사용 예제로는 맛집앱이 있었다. 특정 맛집을 클릭하면, 그 맛집 상세 페이지에 네이버 블로그 검색 결과를 띄워주는 식. 사용자 입장에서는 앱에서 정보 확인도 하고, 네이버 검색 결과도 한번에 볼 수 있으니 무척 편리할 것이다.

보다시피, 그 외에도 다양한 검색 기능을 제공한다.

본론으로 넘어가서, 이제 네이버 검색 API를 안드로이드에 적용해보도록 하자.


1. 네이버 검색 API 신청 (https://developers.naver.com/products/search/)

위 페이지로 접속하여, 아래와 같이 오픈 API신청을 한 후 클라이언트 키값을 받아야한다.

어플리케이션 이름, 그리고 서비스 환경을 선택 후 생성한다. 그럼 내 애플리케이션 페이지에서 아래와 같이 클라이언트 값들을 확인할 수 있다. 


2. 구현하고자 하는 Activity에 다음 함수를 삽입한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
 
    public void searchNaver(final String searchObject) { // 검색어 = searchObject로 ;
        final String clientId = "CLIENT_ID";//애플리케이션 클라이언트 아이디값";
        final String clientSecret = "CLIENT_SECRET_KEY";//애플리케이션 클라이언트 시크릿값";
        final int display = 5// 보여지는 검색결과의 수
 
        // 네트워크 연결은 Thread 생성 필요
        new Thread() {
 
            @Override
            public void run() {
                try {
                    String text = URLEncoder.encode(searchObject, "UTF-8");
                    String apiURL = "https://openapi.naver.com/v1/search/blog?query=" + text + "&display=" + display + "&"// json 결과
  // Json 형태로 결과값을 받아옴.
                    URL url = new URL(apiURL);
                    HttpURLConnection con = (HttpURLConnection) url.openConnection();
                    con.setRequestMethod("GET");
                    con.setRequestProperty("X-Naver-Client-Id", clientId);
                    con.setRequestProperty("X-Naver-Client-Secret", clientSecret);
                    con.connect();
 
                    int responseCode = con.getResponseCode();
 
 
                    if(responseCode==200) { // 정상 호출
                        br = new BufferedReader(new InputStreamReader(con.getInputStream()));
 
                    } else {  // 에러 발생
                        br = new BufferedReader(new InputStreamReader(con.getErrorStream()));
                    }
 
                    searchResult = new StringBuilder();
                    String inputLine;
                    while ((inputLine = br.readLine()) != null) {
                        searchResult.append(inputLine + "\n");
 
                    }
                    br.close();
                    con.disconnect();
 
                    String data = searchResult.toString();
                    String[] array;
                    array = data.split("\"");
                    String[] title = new String[display];
                    String[] link = new String[display];
                    String[] description = new String[display];
                    String[] bloggername = new String[display];
                    String[] postdate = new String[display];
 
                    int k = 0;
                    for (int i = 0; i < array.length; i++) {
                        if (array[i].equals("title"))
                            title[k] = array[i + 2];
                        if (array[i].equals("link"))
                            link[k] = array[i + 2];
                        if (array[i].equals("description"))
                            description[k] = array[i + 2];
                        if (array[i].equals("bloggername"))
                            bloggername[k] = array[i + 2];
                        if (array[i].equals("postdate")) {
                            postdate[k] = array[i + 2];
                            k++;
                        }
                    }
 
                    Log.d(TAG, "title잘나오니: " + title[0] + title[1] + title[2]);
// title[0], link[0], bloggername[0] 등 인덱스 값에 맞게 검색결과를 변수화하였다.

                } catch (Exception e) {
                    Log.d(TAG, "error : " + e);
                }
 
            }
        }.start();
 
    }

cs


Client ID와 secret Key는 첫번째 단계에서 본인이 받은 값을 입력해넣으면 된다. 함수를 작성했다면, Activity에서 본인이 원하는 검색어를 searchObject로 지정하고 사용하면 된다. 

결과값은 다음과 같다.

title: 블로그 제목

link: 블로그 글 URL 링크

description: 블로그 글 내용

bloggername: 블로그 주인장 닉네임

postdate: 블로그 글 작성일

이런 형태로 저장되며, 위 예시에서는 결과값을 5개만 노출되게 해놨기 때문에, 각 변수별로 끝에 인덱스값만 붙이면 검색결과를 앱에서 사용할 수 있다.

(ex. title[0] : 첫번째 검색결과의 블로그 글 제목 /// postdate[3]: 네번째 검색 결과 블로그 글의 작성일)


댓글