관리 메뉴

SW

네이버 API 본문

대학교/etc

네이버 API

SWKo 2020. 4. 6. 19:52

0. 네이버 API 사용 방법

1) 아래 url에서 API 키를 발급 받는다.

https://developers.naver.com 

 

NAVER Developers

네이버 오픈 API들을 활용해 개발자들이 다양한 애플리케이션을 개발할 수 있도록 API 가이드와 SDK를 제공합니다. 제공중인 오픈 API에는 네이버 로그인, 검색, 단축URL, 캡차를 비롯 기계번역, 음성인식, 음성합성 등이 있습니다.

developers.naver.com

 

 

2) Products -> 서비스 API -> 검색

 

 

 

3) API 키를 발급 받기 위해 오픈 API 이용 신청 버튼을 클릭한다.

 

 

 

4) 정보 입력 (비로그인 오픈 API 서비스 환경 -> WEB 설정)

 

 

 

5) Client ID / Client Server 발급 완료

 


1. 활용 예시

 

Google Code Archive - Long-term storage for Google Code Project Hosting.

 

code.google.com

  • 다음은 영화제목을 입력받아 검색할 수 있는 코드이다.
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package test;
 
import java.io.*;
import java.util.Scanner;
 
 
public class ApiExamSearchMovie {
 
    public static void main(String[] args) throws ParseException {
        String clientId = "발급받은 클라이언트 아이디"//애플리케이션 클라이언트 아이디값"
        String clientSecret = "발급받은 클라이언트 시크릿값"//애플리케이션 클라이언트 시크릿값"
        String text = null;
        try {
            Scanner scan = new Scanner(System.in);
            String str;
            System.out.print("검색어를 입력하세요 : ");
            str = scan.nextLine();
            text = URLEncoder.encode(str, "UTF-8");
            scan.close();
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException("검색어 인코딩 실패",e);
        }
 
        String apiURL = "https://openapi.naver.com/v1/search/movie.json?query=" + text + "&display=10&start=1";    // json 결과
        //String apiURL = "https://openapi.naver.com/v1/search/blog.xml?query="+ text; // xml 결과
 
        Map<StringString> requestHeaders = new HashMap<>();
        requestHeaders.put("X-Naver-Client-Id", clientId);
        requestHeaders.put("X-Naver-Client-Secret", clientSecret);
        String responseBody = get(apiURL,requestHeaders);
 
        JSONParser jsonParser = new JSONParser();
        JSONObject jsonObject = (JSONObject) jsonParser.parse(responseBody);
        JSONArray infoArray = (JSONArray) jsonObject.get("items");
        
        for(int i = 0; i < infoArray.size(); i++) {
            System.out.println("=item_" + i + "============================");
            JSONObject itemObject = (JSONObject) infoArray.get(i);
            System.out.println("title:\t" + itemObject.get("title"));
            System.out.println("subtitle:\t" + itemObject.get("subtitle"));
            System.out.println("director:\t" + itemObject.get("director"));
            System.out.println("actor:\t" + itemObject.get("actor"));
            System.out.println("userRating:\t" + itemObject.get("userRating"+ "\n");
 
        }
    }
    
 
    private static String get(String apiUrl, Map<StringString> requestHeaders){
        HttpURLConnection con = connect(apiUrl);
        try {
            con.setRequestMethod("GET");
            for(Map.Entry<StringString> header :requestHeaders.entrySet()) {
                con.setRequestProperty(header.getKey(), header.getValue());
            }
 
            int responseCode = con.getResponseCode();
            if (responseCode == HttpURLConnection.HTTP_OK) { // 정상 호출
                return readBody(con.getInputStream());
            } else { // 에러 발생
                return readBody(con.getErrorStream());
            }
        } catch (IOException e) {
            throw new RuntimeException("API 요청과 응답 실패", e);
        } finally {
            con.disconnect();
        }
    }
 
    private static HttpURLConnection connect(String apiUrl){
        try {
            URL url = new URL(apiUrl);
            return (HttpURLConnection)url.openConnection();
        } catch (MalformedURLException e) {
            throw new RuntimeException("API URL이 잘못되었습니다. : " + apiUrl, e);
        } catch (IOException e) {
            throw new RuntimeException("연결이 실패했습니다. : " + apiUrl, e);
        }
    }
 
    private static String readBody(InputStream body){
        InputStreamReader streamReader = new InputStreamReader(body);
 
        try (BufferedReader lineReader = new BufferedReader(streamReader)) {
            StringBuilder responseBody = new StringBuilder();
 
            String line;
            while ((line = lineReader.readLine()) != null) {
                responseBody.append(line);
            }
 
            return responseBody.toString();
        } catch (IOException e) {
            throw new RuntimeException("API 응답을 읽는데 실패했습니다.", e);
        }
    }
}
 
  • 다음과 같이 제목을 검색하여 정보를 얻을 수 있다.

Comments