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

 

검색 API 블로그 검색 개발가이드

NAVER Developers - 검색 API 블로그 검색 개발가이드

developers.naver.com

더보기

기존 파파고 코드 밑에 붙여넣기 (connect , readbody는 중복)

public static void main(String[] args) {
        String clientId = "YOUR_CLIENT_ID"; //애플리케이션 클라이언트 아이디값"
        String clientSecret = "YOUR_CLIENT_SECRET"; //애플리케이션 클라이언트 시크릿값"

        String text = null;
        try {
            text = URLEncoder.encode("그린팩토리", "UTF-8");
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException("검색어 인코딩 실패",e);
        }

        String apiURL = "https://openapi.naver.com/v1/search/blog?query=" + text;    // json 결과
        //String apiURL = "https://openapi.naver.com/v1/search/blog.xml?query="+ text; // xml 결과

        Map<String, String> requestHeaders = new HashMap<>();
        requestHeaders.put("X-Naver-Client-Id", clientId);
        requestHeaders.put("X-Naver-Client-Secret", clientSecret);
        String responseBody = get(apiURL,requestHeaders);

        System.out.println(responseBody);
    }

    private static String get(String apiUrl, Map<String, String> requestHeaders){
        HttpURLConnection con = connect(apiUrl);
        try {
            con.setRequestMethod("GET");
            for(Map.Entry<String, String> 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();
        }
    }

 

수정한 코드

//네이버 검색API 추가////////////////////////////////////////////
	
	public static void searchNews(String keyword)  throws Exception{
        String clientId = "fGYnIqMXhxG3tTIy4YY2"; //애플리케이션 클라이언트 아이디값"
        String clientSecret = "Rr3Hzk7W2D"; //애플리케이션 클라이언트 시크릿값"

        String text = null;
        try {
            text = URLEncoder.encode(keyword, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException("검색어 인코딩 실패",e);
        }

        String apiURL = "https://openapi.naver.com/v1/search/news?query=" + text;    // json 결과
        //String apiURL = "https://openapi.naver.com/v1/search/blog.xml?query="+ text; // xml 결과

        Map<String, String> requestHeaders = new HashMap<>();
        requestHeaders.put("X-Naver-Client-Id", clientId);
        requestHeaders.put("X-Naver-Client-Secret", clientSecret);
        String responseBody = get(apiURL,requestHeaders);

        System.out.println(responseBody);
    }

    private static String get(String apiUrl, Map<String, String> requestHeaders)  throws Exception{
        HttpURLConnection con = connect(apiUrl);
        try {
            con.setRequestMethod("GET");
            for(Map.Entry<String, String> 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();
        }
    }
//콘솔창

{"lastBuildDate": "Thu, 23 Apr 2020 11:28:34 +0900","total": 1892068,"start": 1,"display": 10,"items": 
   [
    {"title": "한국노총 &quot;특고·프리 대책 한계...대상·규모 확대하라&quot;","originallink": "https://www.sedaily.com/NewsView/1Z1L4J3E2X","link": "https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=102&oid=011&aid=0003728611","description": "한국노총과 플랫폼프리랜서 노동자협동조합협의회·전국대리기사협회와 함께 23일 청와대 앞에서 ‘플랫폼 특고 프리랜서 노동자에 대한 정부의 <b>코로나</b>19 지원대책 개선 요구’ 기자회견을 개최했다. 김현중 한국노총... ","pubDate": "Thu, 23 Apr 2020 11:27:00 +0900"},
    {"title": "블랙핑크, 팝스타 레이디 가와 협업…&quot;서로의 팬&quot;","originallink": "http://starin.edaily.co.kr/news/newspath.asp?newsid=01193926625739072","link": "https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=106&oid=018&aid=0004626177","description": "최근엔 <b>코로나</b>19 극복 기금 마련을 위해 전 세계 유명 뮤지션들이 동참한 온라인 자선 콘서트 ‘원 월드: 투게더 앳 홈’((One World: Together At Home))을 주도해 화제를 모았다. 블랙핑크는 강렬한 음악과 트렌디한... ","pubDate": "Thu, 23 Apr 2020 11:27:00 +0900"},
    {"title": "日 NTT도코모, 갤S20 도쿄올림픽 에디션 출시 취소","originallink": "http://news.mk.co.kr/newsRead.php?no=422779&year=2020","link": "https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=105&oid=009&aid=0004562445","description": "이는 국제올림픽위원회(IOC)가 <b>코로나</b>19 확산으로 도쿄올림픽을 1년 연기한 데 따른 것이다. NTT도코모는 지난달 18일부터 갤럭시S20플러스 도쿄올림픽 에디션을 사전예약 받았다. 명확한 출시일은 밝혀지지 않았으나... ","pubDate": "Thu, 23 Apr 2020 11:27:00 +0900"},
    {"title": "대한항공·아시아나항공, 유동성 긴급 수혈받는다…‘자구노력’ 전제","originallink": "https://www.vop.co.kr/A00001483837.html","link": "https://www.vop.co.kr/A00001483837.html","description": "<b>코로나</b>19 여파로 하늘길이 막히면서 타격을 입은 항공업계에 대해 정부가 추가 지원책을 마련했다. 유동성을 지원하는 한편, 각종 사용료와 세금을 감면한다.정부는 23일 홍남기 경제부총리 주재로 열린 제5차... ","pubDate": "Thu, 23 Apr 2020 11:27:00 +0900"},
    {"title": "캐나다서 &quot;<b>코로나</b>&quot; 외치며 치매걸린 92세 아시아인 내동댕이","originallink": "https://news.chosun.com/site/data/html_dir/2020/04/23/2020042301979.html?utm_source=naver&utm_medium=original&utm_campaign=news","link": "https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=104&oid=023&aid=0003525927","description": "이 남성은 노인을 내동댕이 치면서 “<b>코로나</b> 바이러스”라 외친 것으로 알려졌다. 밴쿠버 경찰 당국은... 목격자 진술에 따르면 피의자는 노인을 향해 “<b>코로나</b> 바이러스”라고 소리쳤다. 밴쿠버 경찰은 이 사건을... ","pubDate": "Thu, 23 Apr 2020 11:27:00 +0900"},
    {"title": "켐온, SK바이오사이언스의 <b>코로나</b>19 백신 비임상 시험 진행","originallink": "http://news.mk.co.kr/newsRead.php?no=422782&year=2020","link": "https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=101&oid=009&aid=0004562447","description": "중인 <b>코로나</b>19 백신의 비임상(동물시험) 연구를 위탁받아 본격적인 시험에 착수한다고 23일 밝혔다. SK바이오사이언스는 지난 2월부터 <b>코로나</b> 19백신 개발을 추진해왔고 검증된 기관을 통한 독성시험 단계에 진입했다.... ","pubDate": "Thu, 23 Apr 2020 11:27:00 +0900"},
    {"title": "무등산편백자연휴양림 지원받은 긴급자금 전액 기부","originallink": "http://www.metroseoul.co.kr/article/20200423500136","link": "http://www.metroseoul.co.kr/article/20200423500136","description": "긴급경영안전자금은 <b>코로나</b>19 확산과 장기화로 경영난을 겪고 있는 자영업과 영세사업장 등 소상공인을... 진춘호 대표는 &quot;<b>코로나</b>19 확산으로 많은 사람이 힘들지만 서로 돕고 응원해서 위기를 극복했으면 좋겠다&quot;고... ","pubDate": "Thu, 23 Apr 2020 11:27:00 +0900"},
    {"title": "휘발윳값 ‘물보다 싸다’ 는데…체감효과 ‘0’ 분통 터지는 소비자","originallink": "http://news.heraldcorp.com/view.php?ud=20200423000382","link": "https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=101&oid=016&aid=0001665661","description": "오정근 건국대 특임교수는 “유류세 인하는 정유사의 부담을 덜고 국민도 저렴한 가격에 소비할 수 있는 양수겸장의 카드”라며 “마침 현 시점이 <b>코로나</b>19의 기세가 주춤하며 사람들의 활동이 늘어나는 시기인 만큼... ","pubDate": "Thu, 23 Apr 2020 11:27:00 +0900"},
    {"title": "자가격리자에게 감동을 준 공무원 이야기","originallink": "http://www.metroseoul.co.kr/article/20200423500128","link": "http://www.metroseoul.co.kr/article/20200423500128","description": "최근들어 '<b>코로나</b>19' 확진자는 많이 감소했다. 강도높은 사회적 거리두기 캠페인으로 지역사회 감염은 크게... '<b>코로나</b>19'로 온 국민이 지쳐가는 상황에서 감염의 두려움을 접어두고 환자를 치료하는 의료진과 하루라도... ","pubDate": "Thu, 23 Apr 2020 11:27:00 +0900"},
    {"title": "젠하이저, 노이즈캔슬링 헤드폰 및 무선 마이크 할인","originallink": "https://www.sisa-news.com/news/article.html?no=124733","link": "https://www.sisa-news.com/news/article.html?no=124733","description": "젠하이저의 관계자는 “<b>코로나</b>19의 여파가 현대인들의 일상에 많은 영향을 끼치고 있는 가운데 젠하이저가 재택근무를 하는 직장인, 인터넷 강의를 수강하는 학생들의 업무 효율도와 집중력을 높여 줄 노이즈캔슬링... ","pubDate": "Thu, 23 Apr 2020 11:27:00 +0900"}
   ]
}

타이틀과 날짜만 나오도록

 

	//네이버 검색API 추가////////////////////////////////////////////

	public static void searchNews(String keyword)  throws Exception{
		String clientId = "fGYnIqMXhxG3tTIy4YY2"; //애플리케이션 클라이언트 아이디값"
		String clientSecret = "Rr3Hzk7W2D"; //애플리케이션 클라이언트 시크릿값"

		String text = null;
		try {
			text = URLEncoder.encode(keyword, "UTF-8");
		} catch (UnsupportedEncodingException e) {
			throw new RuntimeException("검색어 인코딩 실패",e);
		}

		String apiURL = "https://openapi.naver.com/v1/search/news?query=" + text;    // json 결과
		//String apiURL = "https://openapi.naver.com/v1/search/blog.xml?query="+ text; // xml 결과

		Map<String, String> requestHeaders = new HashMap<>();
		requestHeaders.put("X-Naver-Client-Id", clientId);
		requestHeaders.put("X-Naver-Client-Secret", clientSecret);
		String responseBody = get(apiURL,requestHeaders);


		//타이틀과 날짜만 나오도록
		JsonElement root = JsonParser.parseString(responseBody);
		JsonObject rootObj = root.getAsJsonObject();
		JsonArray itemsArrayObj = rootObj.getAsJsonArray("items");
		//		System.out.println(itemsObj); // []배열
		//		System.out.println(itemsObj.size()); // 배열사이즈

		String[] title = new String[itemsArrayObj.size()]; // 배열로 따로 저장한하고 바로 출력해도 ok
		String[] pubDate = new String[itemsArrayObj.size()];

		for(int i =0 ; i< itemsArrayObj.size(); i++ )
		{
			JsonObject newsObj = itemsArrayObj.get(i).getAsJsonObject(); // []안의 JsonObject 순서대로 꺼내기
			title[i] = newsObj.get("title").getAsString(); //꺼낸 JsonObject에서 키값 title인 value 꺼내기
			pubDate[i] = newsObj.get("pubDate").getAsString(); //toString은 따옴표포함해서 나옴

			System.out.println("===========================================");
			System.out.println("제목 : "+title[i]);
			System.out.println("날짜 : "+pubDate[i]);
			System.out.println("===========================================");
		}
	}

	private static String get(String apiUrl, Map<String, String> requestHeaders)  throws Exception{
		HttpURLConnection con = connect(apiUrl);
		try {
			con.setRequestMethod("GET");
			for(Map.Entry<String, String> 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();
		}
	}

 

 

더보기
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;

import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

public class NaverAPI {
	public static void translateKorToEng(String msg)throws Exception {
		String clientId = "RYMXbMmrZLRdCw3G53SG";//애플리케이션 클라이언트 아이디값";
		String clientSecret = "lCfHkQotTh";//애플리케이션 클라이언트 시크릿값";

		String apiURL = "https://openapi.naver.com/v1/papago/n2mt";
		String text;
		try {
			text = URLEncoder.encode(msg, "UTF-8");
		} catch (UnsupportedEncodingException e) {
			throw new RuntimeException("인코딩 실패", e);
		}

		Map<String, String> requestHeaders = new HashMap<>();
		requestHeaders.put("X-Naver-Client-Id", clientId);
		requestHeaders.put("X-Naver-Client-Secret", clientSecret);

		String responseBody = post(apiURL, requestHeaders, text);

		//뿌리데이터
		JsonElement root = JsonParser.parseString(responseBody);
		JsonObject rootObj = root.getAsJsonObject();

		JsonObject messageObj = rootObj.getAsJsonObject("message");
		//		System.out.println(messageObj);
		//{"@type":"response","@service":"naverservice.nmt.proxy","@version":"1.0.0","result":{"srcLangType":"ko","tarLangType":"en","translatedText":"Hi.","engineType":"N2MT","pivot":null}}

		JsonObject resultObj = messageObj.getAsJsonObject("result");
		//		System.out.println(resultObj); 
		//{"srcLangType":"ko","tarLangType":"en","translatedText":"Hi.","engineType":"N2MT","pivot":null}

		String message = resultObj.get("translatedText").getAsString();
		System.out.println(message);
	}

	private static String post(String apiUrl, Map<String, String> requestHeaders, String text)throws Exception{
		HttpURLConnection con = connect(apiUrl);
		//타켓 언어 변격
		String postParams = "source=ko&target=ru&text=" + text; //원본언어: 한국어 (ko) -> 목적언어: 영어 (en)
		try {
			con.setRequestMethod("POST");
			for(Map.Entry<String, String> header :requestHeaders.entrySet()) {
				con.setRequestProperty(header.getKey(), header.getValue());
			}

			con.setDoOutput(true);
			try (DataOutputStream wr = new DataOutputStream(con.getOutputStream())) {
				wr.write(postParams.getBytes());
				wr.flush();
			}

			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) throws Exception{
		InputStreamReader streamReader = new InputStreamReader(body, "UTF-8");

		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);
		}
	}

	//네이버 검색API 추가////////////////////////////////////////////

	public static void searchNews(String keyword)  throws Exception{
		String clientId = "fGYnIqMXhxG3tTIy4YY2"; //애플리케이션 클라이언트 아이디값"
		String clientSecret = "Rr3Hzk7W2D"; //애플리케이션 클라이언트 시크릿값"

		String text = null;
		try {
			text = URLEncoder.encode(keyword, "UTF-8");
		} catch (UnsupportedEncodingException e) {
			throw new RuntimeException("검색어 인코딩 실패",e);
		}

		String apiURL = "https://openapi.naver.com/v1/search/news?query=" + text;    // json 결과
		//String apiURL = "https://openapi.naver.com/v1/search/blog.xml?query="+ text; // xml 결과

		Map<String, String> requestHeaders = new HashMap<>();
		requestHeaders.put("X-Naver-Client-Id", clientId);
		requestHeaders.put("X-Naver-Client-Secret", clientSecret);
		String responseBody = get(apiURL,requestHeaders);


		//타이틀과 날짜만 나오도록
		JsonElement root = JsonParser.parseString(responseBody);
		JsonObject rootObj = root.getAsJsonObject();
		JsonArray itemsObj = rootObj.getAsJsonArray("items");
//		System.out.println(itemsObj); // []배열
//		System.out.println(itemsObj.size()); // 배열사이즈

		String[] title = new String[itemsObj.size()];
		String[] pubDate = new String[itemsObj.size()];


		for(int i =0 ; i< itemsObj.size(); i++ )
		{
			JsonObject newsObj = itemsObj.get(i).getAsJsonObject();//여기가 문제

			title[i] = newsObj.get("title").getAsString();
			pubDate[i] = newsObj.get("pubDate").getAsString();

			System.out.println("===========================================");
			System.out.println("제목 : "+title[i]);
			System.out.println("날짜 : "+pubDate[i]);
			System.out.println("===========================================");

		}


	}

	private static String get(String apiUrl, Map<String, String> requestHeaders)  throws Exception{
		HttpURLConnection con = connect(apiUrl);
		try {
			con.setRequestMethod("GET");
			for(Map.Entry<String, String> 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();
		}
	}
}
import java.util.Scanner;

public class Exam_01 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.print("입력 : ");
		String msg = sc.nextLine();
		
		try {
			NaverAPI.searchNews(msg);
		}catch(Exception e) {
			e.printStackTrace();
			System.out.println("검색에 실패했습니다.");
		}	
	}
}

'디지털 컨버전스 > OpenApi' 카테고리의 다른 글

[이미지업로드] summernote  (0) 2020.05.25
[WebAPI] 지도  (0) 2020.04.23
[WebAPI] PAPAGO - 다른 언어 활용  (0) 2020.04.23
[WebAPI] GSON  (0) 2020.04.23
[WebAPI] PAPAGO  (0) 2020.04.23

+ Recent posts