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

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

by teamnova 2021. 3. 31.
728x90

안녕하세요.

스틱 코드를 통해서 네이버 검색 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를 사용하면 양질에 데이터를 쉽게 받아와서 앱에 활용할 수 있을 것 같네요.