안녕하세요. 오늘은 네이버 검색 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)
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
자바 메소드 오버로딩이란(Method Overloading) (0) | 2017.11.24 |
---|---|
자바 인스턴스 변수 vs 클래스 변수 (0) | 2017.11.24 |
자바 private,public,default,protected접근자 차이 (0) | 2017.11.22 |
자바 클래스와 인스턴스 (0) | 2017.11.21 |
자바 HashMap 사용법입니다. (0) | 2016.12.14 |