본문 바로가기
안드로이드 자바

[JAVA][안드로이드] 네이버 검색 API를 빠르게 구현 하기

by teamnova 2021. 3. 31.

안녕하세요.

스틱 코드를 통해서 네이버 검색 API를 빠르게 구현하는 방법을 공유하겠습니다.

 

아래 스틱 코드 공개 포스팅을 보시면 코드를 확인하실 수 있습니다.

 

stickode.com/detail.html?no=1985

 

스틱코드

 

stickode.com


사전 준비 사항

 

1. 스틱 코드 회원가입

(https://stickode.com/signup.html)

 

2. 안드로이드 스튜디오에 스틱 코드 설치 및 로그인

(https://stickode.com/howto.html#jetbrains_installation)


1. 네이버 Developers 애플리케이션 등록

네이버 Developers 애플리케이션 등록

 

네이버 Developers 웹사이트에 로그인 후 애플리케이션을 등록해야 API 사용이 가능합니다.

 

안드로이드 앱 패키지 이름 확이 방법 - AndroidManifest.xml 에서 package 확인

 

2. 네이버 Developers 애플리케이션 정보 확인

 

내 애플리케이션에 musicPlayer로 등록된 것을 확인할 수 있다.

 

Client ID와 Client Secret 정보를 활용하여 네이버 검색 API를 구현할 수 있습니다.

 

 

3. 구현 화면

네이버 뉴스, 책, 카페, 지식 IN 카테고리를 선택하고

검색어를 입력하면 내용이 출력되도록 구현하겠습니다.

 

카테고리 선택 및 검색 결과 확인

 

 

4. 인터넷 사용 퍼미션 등록

인터넷 사용 퍼미션 등록

<uses-permission android:name="android.permission.INTERNET" />

 

 

5. 구현 중요 코드

 

  • 검색 버튼 클릭 이벤트 코드
//검색
searchIb.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
      SearchNews(category, String.valueOf(searchEt.getText()));
      }
 });

검색 버튼 클릭 시 카테고리와 검색어를 매개변수로 포함하여 SearchNews() 메서드를 호출한다.

 

 

  • 네이버 검색 API 요청 코드
private void SearchNews(final String _category, final String searchWord)
    {

        if(_category.equals("") && _category != null)
        {
            Toast.makeText(getApplicationContext(), "카테고리를 선택해주세요.",
                    Toast.LENGTH_SHORT).show();
        }
        else if(searchWord.equals("") && searchWord != null)
        {
            Toast.makeText(getApplicationContext(), "검색어를 입력해주세요.",
                    Toast.LENGTH_SHORT).show();
        }
        else
        {
            new Thread() {
                @Override
                public void run() {

                    String clientId = "클라이언트 아이디";//애플리케이션 클라이언트 아이디값";
                    String clientSecret = "클라이언트 시크릿";//애플리케이션 클라이언트 시크릿값";
                    try {
                        String text = URLEncoder.encode(searchWord, "UTF-8");
                        String apiURL = "https://openapi.naver.com/v1/search/" + _category + "?query=" + text +"&display=20"; // json 결과
                        //String apiURL = "https://openapi.naver.com/v1/search/blog.xml?query="+ text; // xml 결과
                        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);
                        int responseCode = con.getResponseCode();
                        BufferedReader br;
                        if (responseCode == 200) { // 정상 호출
                            br = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
                        } else {  // 에러 발생
                            br = new BufferedReader(new InputStreamReader(con.getErrorStream()));
                        }
                        String inputLine;
                        response = new StringBuffer();
                        while ((inputLine = br.readLine()) != null) {
                            response.append(inputLine);
                            response.append("\n");
                        }
                        br.close();

                        String naverHtml = response.toString();

                        Bundle bun = new Bundle();
                        bun.putString("NAVER_HTML", naverHtml);
                        Message msg = handler.obtainMessage();
                        msg.setData(bun);
                        handler.sendMessage(msg);

                        //testText.setText(response.toString());
                        //System.out.println(response.toString());
                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                }
            }.start();
        }

    }

위에서 발급받은 Client ID와 Client Secret 정보를

clientId 변수와 clientSecret 변수에 각각 값으로 넣으면 됩니다.

 

그러면 검색 버튼을 클릭할 때마다 네이버 서버로 검색 정보를 보내달라는 요청을 보내게 됩니다.

 

 

6. 리싸이클러 뷰 라이브러리 추가

 

검색 결과를 리싸이클러 뷰로 구현했으므로,

리싸이클러 뷰에 필요한 라이브러리 추가 작업이 필요합니다.

 

build.gradle 리싸이클러뷰 라이브러리 추가

 

7. toolbar 설정

 

뉴스 Activity에서는 toolbar를 사용하므로 Manifast.xml 설정 추가

android:theme="@style/AppTheme.NoActionBar" 추가

 

 

 

8. 스틱 코드에서 코드 불러오기

 

전체 코드는 아래 스틱 코드 공개 포스팅으로 통해서 확인 가능합니다.

아래 공개 포스팅을 즐겨 찾기 하시면 바로 안드로이드 스튜디오에서 불러와 사용이 가능합니다.

 

stickode.com/detail.html?no=1985

 

스틱코드

 

stickode.com

 

스틱 코드로 코드 불러오기

 

즐겨찾기한 코드 불러오기

코드 명을 입력하면 코드 목록이 나옵니다.

코드 목록에서 불러오고자 하는 코드를 클릭하면 해당 코드가 불러와집니다.

 

 

전체 코드 파일 목록

  • java 파일
    • newsActivity
    • RecyclerNewsSearchAdapter
    • NewsRecyclerItem
  • xml 파일
    • activity_news.xml
    • activity_recycler_item.xml

 

네이버 API를 사용하면 양질에 데이터를 쉽게 받아와서 앱에 활용할 수 있을 것 같네요.