[Java] 네이버 검색 API 등록 및 호출하기
- 프로그램언어/자바(Java)
- 2021. 2. 24.
네이버 검색 API 등록
모든 API가 그러하지만 네이버 검색도 사용하기 위해서는 우선적으로 API 등록해서 키를 발급받아야 한다.
developers.naver.com/docs/search/blog/
위 링크로 들어가면 위와 같이 녹색으로 되어 있는 오픈 API 이용 신청 버튼이 존재한다. 이 녀석을 클릭하고
사용 API는 검색을 선택하고 환경을 추가로 설정하는데 웹 형태로 만들고 싶고 내 로컬에서 작업을 하고 싶다면, 위와 같이 로컬호스트 주소를 입력하고 등록하기를 선택한다.
등록하기를 완료하면 이렇게 Client ID와 Client Secret이라는 값들이 발급되는데 이 2개의 값은 추후 API를 호출할 때 필수로 넣어야 되는 값이다. 키를 발급 받았으면 이제 Java로 간단히 검색을 하는 예제를 만들어보도록 한다.
Java로 호출 단계
NaverCrawler.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
/**
* 네이버 블로그 크롤링
*
* @author steel
* @since 2021.02.24
*/
public class NaverCrawler {
// 베이스 URL
final String baseUrl = "https://openapi.naver.com/v1/search/blog.json?query=";
public String search(String clientId, String secret, String _url) {
HttpURLConnection con = null;
String result = "";
try {
URL url = new URL(baseUrl + _url);
con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("X-Naver-Client-Id", clientId);
con.setRequestProperty("X-Naver-Client-Secret", secret);
int responseCode = con.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) result = readBody(con.getInputStream());
else result = readBody(con.getErrorStream());
} catch (Exception e) {
System.out.println("연결 오류 : " + e);
} finally {
con.disconnect();
}
return result;
}
/**
* 결과를 읽는다
*
* @param body
* @return
*/
public 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);
}
}
}
모듈이라 할 수 있는 NaverCrawler 클래스는 2개의 메소드로 이루어 졌는데 검색을 담당하는 search 메소드와 search 메소드에서 나온 결과를 읽어주는 readBody 메소드로 나뉠 수 있다. search 메소드는 3개의 파라미터를 받는데 클라이언트 아이디, 시크릿키 그리고 키워드이다.
이 3가지 값을 이용해서 search 메소드는 네이버 API에 결과를 요청하고 InputStream 형태의 내용을 String 형태로 변환하여 리턴해주는 구조이다.
NaverCrawlerMain.java
import java.net.URLEncoder;
import java.util.Map;
/**
* 네이버 크롤러 메인 클래스
*
* @author steel
* @since 2021.02.24
*/
public class NaverCrawlerMain {
public static void main(String[] args) {
String id = "여기에클라이언트아이디";
String secret = "여기에시크릿값";
try {
NaverCrawler crawler = new NaverCrawler();
String url = URLEncoder.encode("needjarvis", "UTF-8");
String response = crawler.search(id, secret, url);
System.out.println(response);
} catch (Exception e) {
e.printStackTrace();
}
}
}
최종적으로 NaverCrawler를 호출하는 역할은 NaverCralwerMain이 맡으며, 네이버 검색 API로 발급 받은 아이디와 시크릿값을 각각의 파라미터로 하며 검색어는 utf-8로 인코딩을 거쳐서 파라미터에 반영시킨다. 그리고 최종적으로 나온 결과를 System.out으로 출력한다.
System.out.println으로 뿌린 결과
{"lastBuildDate": "Wed, 24 Feb 2021 11:06:54 +0900","total": 106,"start": 1,"display": 10,"items": [{"title": "빅데이터 분석 주제 유형","link": "https:\/\/blog.naver.com\/sky00141?Redirect=Log&logNo=222218730000","description": "빅데이터 분석 주제의 4가지 유형 - 이미지 출처:https://<b>needjarvis</b>.tistory.com/505 최적화(Optimization)은 분석 대상과 분석 방법을 모두 알고 있는 경우 문제를 해결하기 위해 수행하는 방법이며, 솔루션... ","bloggername": "제이의 IT Security 블로그","bloggerlink": "https://blog.naver.com/sky00141","postdate": "20210125"},{"title": "엘라스틱서치(Elasticsearch) 노드(Node)의 종류","link": "https:\/\/blog.naver.com\/koys007?Redirect=Log&logNo=222246765077","description": "yml 에서 아래 내용 추가 node.master: false node.data: false node.ingest: true search.remote.connect: false 출처: https://<b>needjarvis</b>.tistory.com/579 [자비스가 필요해]","bloggername": "koys007님의 블로그","bloggerlink": "https://blog.naver.com/koys007","postdate": "20210217"},{"title": "척도(Metrics)","link": "https:\/\/blog.naver.com\/jamsuham75?Redirect=Log&logNo=222216354329","description": "둘간의 개념이 사실상 유사하기 때문에 동일한 개념으로 어쩔 땐 척도를 사용하기도 하고 어쩔 땐 손실함수를 쓰기도 한다. 출처 : https://<b>needjarvis</b>.tistory.com/568","bloggername": "이창현 코딩연구소","bloggerlink": "https://blog.naver.com/jamsuham75","postdate": "20210122"},{"title": "Mysql 페이징","link": "https:\/\/blog.naver.com\/vivacarla?Redirect=Log&logNo=222134289375","description": "page=1로 셋팅함 srchDetail.offSet = (srchDetail.page - 1) * srchDetail.detailViewSize 이므로 detailViewSize 는 이런거 말함 https://<b>needjarvis</b>.tistory.com/259","bloggername": "Act","bloggerlink": "https://blog.naver.com/vivacarla","postdate": "20201103"},{"title": "블록체인 핵심 Keyword 정리","link": "https:\/\/blog.naver.com\/losxodn?Redirect=Log&logNo=221573971343","description": "노드가 없을 경우 서비스를 유지할 수 없음 출처: https://<b>needjarvis</b>.tistory.com/237 [자비스가... 출처: https://<b>needjarvis</b>.tistory.com/239?category=761117 [자비스가 필요해] > 자세한 건 해당 포스팅... ","bloggername": "Smileyujacha 's DAILY BLOG","bloggerlink": "https://blog.naver.com/losxodn","postdate": "20190630"},{"title": "[데이터분석] 장바구니 분석(apriori 알고리즘) 사용 및... ","link": "https:\/\/blog.naver.com\/varkiry05?Redirect=Log&logNo=221725428713","description": "참고: https://<b>needjarvis</b>.tistory.com/59 http://www.dodomira.com/2016/02/15/r%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%97%B0%EA%B4%80%EC%84%B1-%EB%B6%84%EC%84%9D-association-rules-in-r/ http://blog.naver.com/PostView.nhn?blogId=eqfq1... ","bloggername": "나의 색으로 채워지는 곳","bloggerlink": "https://blog.naver.com/varkiry05","postdate": "20191204"},{"title": "블록체인 검증기술, 머클트리, 머클루트 - 모두의 블록체인 #7","link": "https://needjarvis.tistory.com/634","description": "사람 <b>needjarvis</b>.tistory.com [Java] SHA-256 해싱(Hashing) 알고리즘 사용법 [Java] SHA-256 해싱(Hashing)... 이 함수는 미국 국가안보국(NSA)에서 1993년 처음 설계했으며, 미국 국가 표 <b>needjarvis</b>.tistory.com 참고로... ","bloggername": "자비스가 필요해","bloggerlink": "http://needjarvis.tistory.com/","postdate": "20201226"},{"title": "Python Study Links (아나콘다,파이참, Qt5, 시리얼통신)","link": "https:\/\/blog.naver.com\/micomcore?Redirect=Log&logNo=221535759566","description": "Python Anaconda IDLE 실행방법과 파이참 다운 https://<b>needjarvis</b>.tistory.com/170 PyQT5 Tutorial https://wikidocs.net/book/2165 https://mainia.tistory.com/5174 파이썬 공부하려는데 개발환경 공부가 더... ","bloggername": "Digital Power Frontier","bloggerlink": "https://blog.naver.com/micomcore","postdate": "20190512"},{"title": "정형, 비정형, 반정형 데이터","link": "https://valuefactory.tistory.com/958","description": "모두 다 포함이 되어 있는가를 통해 반정형 여부를 판단 한 후, 정형과 비정형을 가리면 되는 것이다. 출처 https://<b>needjarvis</b>.tistory.com/502 공유하기 글 요소 구독하기 가치관제작소 저작자표시 비영리 변경금지","bloggername": "가치관제작소","bloggerlink": "http://valuefactory.tistory.com/","postdate": "20210112"},{"title": "암호화폐(Cryptocurrency)가 중요한 이유.","link": "https:\/\/blog.naver.com\/amc_2020?Redirect=Log&logNo=222202794520","description": "도리안 사토시 나카모토(Dorian Satoshi Nakamoto) 출처: https://<b>needjarvis</b>.tistory.com/406 [자비스가 필요해] 익명의 프로그래머인 '도리안 나카모토 사토시'가 2009년에 시작한 비트코인의 "피어 투 피어 전자 현금... ","bloggername": "AMC Premier","bloggerlink": "https://blog.naver.com/amc_2020","postdate": "20210110"}]}
최종 결과는 위와 같이 JSON 구조로 리턴이 되며, 다음 포스팅에서는 이 내용들을 파싱하는 법을 알아보도록 한다.
연관포스팅
'프로그램언어 > 자바(Java)' 카테고리의 다른 글
StringBuffer의 초기화(Clear)의 3가지 방법 비교 (1) | 2021.05.21 |
---|---|
[Java] 네이버(Naver) 검색 사용 및 JSON 파싱(Parsing)하기 (2) | 2021.02.26 |
[Java] 자바에서 Map 반복 시키는 방법들 (0) | 2021.01.02 |
[Java] 랜덤함수 사용 및 속도 비교 (0) | 2020.12.08 |
포조(Plain Old Java Object, POJO) 이해하기 (0) | 2020.09.28 |