프로그래밍 언어/JAVA

네이버 API사용법 (java,안드로이드스튜디오)

원원 2017. 11. 17. 16:18





안녕하세요. 오늘은 네이버 검색 API를 사용해 보겠습니다. JAVA를 이용해서 해 볼거구요, JAVA를 사용하므로 안드로이드스튜디오에서도 그대로 적용됩니다.

( 여기서는 네이버API를 사용하지만 공공데이터API,기상청API등 사용방법은 똑같습니다)





https://developers.naver.com/docs/search/blog/


일단 네이버API를 사용하려면 키값을 받아야되는데 위의 사이트로가서 API신청버튼을 누르면 바로 신청이 됩니다.




-출력 포맷


XML

<group>

<name>

"one

<name/>



JSON

group: {

name : "one"

}


이런식으로 데이터들이 나와서 자기가 원하는 형식을 선택하면 됩니다.



-요청변수

API를 요청할 때 나오게 할 정보의 규칙입니다.




-출력결과


요청한 정보들에 대한 정보입니다.



실제로 검색API 블로그를 사용해보겠습니다.


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
 
package java_p;
 
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
 
public class main_s {
    public static StringBuilder sb;//
 
    public static void main(String[] args) {
        String clientId = "";// 애플리케이션 클라이언트 아이디값";
        String clientSecret = "";// 애플리케이션 클라이언트 시크릿값";\
        int display = 5// 검색결과갯수. 최대100개
        try {
            String text = URLEncoder.encode("아트메가128""utf-8");
            String apiURL = "https://openapi.naver.com/v1/search/blog.json?query=" + text + "&display=" + display + "&";
 
            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()));
            } else { 
                br = new BufferedReader(new InputStreamReader(con.getErrorStream()));
            }
            sb = new StringBuilder();
            String line;
 
            while ((line = br.readLine()) != null) {
                sb.append(line + "\n");
            }
            br.close();
            con.disconnect();
            System.out.println(sb);
        } catch (Exception e) {
            System.out.println(e);
        }
 
    }
}
cs

위의 코드의 14,15번째 줄에 자신의 키 값을 적어야합니다.



실행결과

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
{
"lastBuildDate""Fri, 17 Nov 2017 16:13:10 +0900",
"total"812,
"start"1,
"display"5,
"items": [
{
"title""[마이크로컴퓨터] <<b>아트메가128</b> AVR Studio 코딩> "ADC이론"",
"link""http://blog.naver.com/dhfl1849?Redirect=Log&logNo=220858319607",
"description""[마이크로컴퓨터] <<b>아트메가128</b> AVR Studio 코딩> "ADC이론" 이번엔 ADC에 대해서 이론부터 배워보려고 한다. ADC는 Analog to Digital Converter로 아날로그 신호를 디지털로 바꿔주는 역할을 수행한다 많은... ",
"bloggername""본질을 알자. 행동하는 피사의사탑.",
"bloggerlink""http://blog.naver.com/dhfl1849",
"postdate""20161110"
 
},
{
"title""마이크로프로세서-<b>아트메가128</b>(atmega) 이용한 임베디드... ",
"link""http://blog.naver.com/since201109?Redirect=Log&logNo=220881537984",
"description""작품명 작품개요 및 동작 작품구성(블록도) 사용부품 및 포트 회로도 알고리즘 Flow Chart(순서도) 작품사진 프로그램 후기 기능 <b>아트메가128</b>로 구현한 자동차의 기능입니다. 기능이 너무 많아서 레포트 내용 중... ",
"bloggername""As a Programmer : SOA, Java, JSP, 안드로이드",
"bloggerlink""http://blog.naver.com/since201109",
"postdate""20161209"
 
},
{
"title""ATMEGA128 (<b>아트메가128</b>) 구동전압",
"link""http://naudhizb.tistory.com/362",
"description""일단 <b>아트메가128</b>의 종류를 알아보자 ATMEGA128 : 4.5V ~5.5V의 구동전압을 가짐 ATMEGA128L : 2.7V ~ 5.5V에서 구동 가능 ATMEGA128A : 2.7V ~ 5.5V에서 구동 가능(차이점 : http://www.atmel.com/Images/doc8166.pdf ) 더 낮은... ",
"bloggername""Brise",
"bloggerlink""http://naudhizb.tistory.com/",
"postdate""20140928"
 
},
{
"title""<<b>아트메가128</b>>기본설명(LED작동 기본 예제)",
"link""http://blog.naver.com/kimhd1997?Redirect=Log&logNo=221086779473",
"description""아트메가(ATMEGA) : CPU의 일종이며 연산, 해독, 제어가 가능한 하나의 칩으로 이루어진 컴퓨터 <b>아트메가128</b>은 64개의 칩을 가진 1.5*1.5 크기의 칩 코딩은 AVR STUDIO를 통해 ISP와 아트메가를... ",
"bloggername""김초초의 하루",
"bloggerlink""http://blog.naver.com/kimhd1997",
"postdate""20170901"
 
},
{
"title""<b>아트메가128</b> 타이머/카운터란?",
"link""http://wowon.tistory.com/85",
"description""<b>아트메가128</b>에는 4개의 타이머/카운터가 있습니다. 이 4개는 타이머 혹은 카운터가 됩니다. 타이머란? 1. 타이머란 시스템 클럭의 변화를 감지합니다. 2. 동기모드입니다, 3. 일정시간 간격의... ",
"bloggername""원원이의 블로그",
"bloggerlink""http://wowon.tistory.com/",
"postdate""20170806"
 
}
]
}
 
 
cs

위의 정보들은 sb변수에 저장되어 있습니다. 이러한 정보들을 사용하기 위해서 다른 변수에 문자열을 잘라서 저장해보겠습니다.


이번에는 검색API 지역을 사용해보겠습니다.


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
 
package java_p;
 
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
 
public class main_s {
    public static StringBuilder sb;//
 
    static String getString(String input, String data) // API에서 필요한 문자 자르기.
    {
        String[] dataSplit = data.split("{" + input + "}");
        String[] dataSplit2 = dataSplit[1].split("\"" + input + "\"");
        return dataSplit2[0];
    }
 
    public static void main(String[] args) {
 
        String clientId = "";
        String clientSecret = "";
        int display = 2;
 
        try {
            String text = URLEncoder.encode("충주 맛집""utf-8");
            String apiURL = "https://openapi.naver.com/v1/search/local?query=" + text + "&display=" + display + "&";
            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()));
            } else {
                br = new BufferedReader(new InputStreamReader(con.getErrorStream()));
            }
            sb = new StringBuilder();
            String line;
 
            while ((line = br.readLine()) != null) {
                sb.append(line + "\n");
            }
 
            br.close();
            con.disconnect();
            System.out.println(sb); 
            String data = sb.toString();
            String[] array;
            array = data.split("\"");
            String[] title = new String[display];
            String[] link = new String[display];
            String[] category = new String[display];
            String[] description = new String[display];
            String[] telephone = new String[display];
            String[] address = new String[display];
            String[] mapx = new String[display];
            String[] mapy = 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("category"))
                    category[k] = array[i + 2];
                if (array[i].equals("description"))
                    description[k] = array[i + 2];
                if (array[i].equals("telephone"))
                    telephone[k] = array[i + 2];
                if (array[i].equals("address"))
                    address[k] = array[i + 2];
                if (array[i].equals("mapx"))
                    mapx[k] = array[i + 2];
                if (array[i].equals("mapy")) {
                    mapy[k] = array[i + 2];
                    k++;
                }
            }
            System.out.println(sb);
            System.out.println("----------------------------");
            System.out.println("첫번째 타이틀 : " + title[0]);
            System.out.println("두번째 타이틀 : " + title[1]);
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}
cs



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
{
"lastBuildDate""Fri, 17 Nov 2017 16:29:59 +0900",
"total"4399,
"start"1,
"display"2,
"items": [
{
"title""카페민들레",
"link""",
"category""음식점>한식",
"description""충청북도 <b>충주</b>시 동량면 화암리 소재 한식집.",
"telephone""043-851-2754",
"address""충청북도 충주시 동량면 화암리 496",
"roadAddress""충청북도 충주시 동량면 지등로 1055",
"mapx""401699",
"mapy""487907"
 
},
{
"title""만리<b>식당</b>",
"link""",
"category""한식>육류,고기요리",
"description""더덕정식, 올갱이, 버섯불고기 및 꿩 샤브샤브 전문점.",
"telephone""043-846-3206",
"address""충청북도 충주시 수안보면 온천리 212-1",
"roadAddress""충청북도 충주시 수안보면 물탕2길 5",
"mapx""399301",
"mapy""471666"
 
}
]
}
 
{
"lastBuildDate""Fri, 17 Nov 2017 16:29:59 +0900",
"total"4399,
"start"1,
"display"2,
"items": [
{
"title""카페민들레",
"link""",
"category""음식점>한식",
"description""충청북도 <b>충주</b>시 동량면 화암리 소재 한식집.",
"telephone""043-851-2754",
"address""충청북도 충주시 동량면 화암리 496",
"roadAddress""충청북도 충주시 동량면 지등로 1055",
"mapx""401699",
"mapy""487907"
 
},
{
"title""만리<b>식당</b>",
"link""",
"category""한식>육류,고기요리",
"description""더덕정식, 올갱이, 버섯불고기 및 꿩 샤브샤브 전문점.",
"telephone""043-846-3206",
"address""충청북도 충주시 수안보면 온천리 212-1",
"roadAddress""충청북도 충주시 수안보면 물탕2길 5",
"mapx""399301",
"mapy""471666"
 
}
]
}
 
----------------------------
첫번째 타이틀 : 카페민들레
두번째 타이틀 : 만리<b>식당</b>
 
cs


위의 코드는 네이버API결과물 뿐만 아니라 다른API결과물에서도 똑같이 문자를 자를 때 사용하면 됩니다.(JSON)