다음 지도

https://apis.map.kakao.com/

불러오는 중입니다...
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=5c1ac6e4f8248e8cc844af9be11e3183"></script>
        //admin 키 넣기
    </head>
    <body>
        <div id="map" style="width:500px;height:400px;"></div>
        <script>
            var container = document.getElementById('map'); //지도를 담을 영역의 DOM 레퍼런스
            var options = { //지도를 생성할 때 필요한 기본 옵션
                center: new kakao.maps.LatLng(33.450701, 126.570667), //지도의 중심좌표.
                level: 3 //지도의 레벨(확대, 축소 정도)
            };

            var map = new kakao.maps.Map(container, options); //지도 생성 및 객체 리턴

        </script>
    </body>
</html>

 

https://apis.map.kakao.com/web/sample/multipleMarkerControl/

불러오는 중입니다...

마커 추가하기

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=5c1ac6e4f8248e8cc844af9be11e3183"></script>
        <style>
            *{margin: auto;}
            p{
                text-align: center;
            }
        </style>
    </head>
    <body>
        <div id="map" style="width:500px;height:400px;"></div>
        <p>
            <button onclick="hideMarkers()">Clear</button>
            <button onclick="showMarkers()">Print</button>
        </p> 
        <script>
            var container = document.getElementById('map'); //지도를 담을 영역의 DOM 레퍼런스
            var options = { //지도를 생성할 때 필요한 기본 옵션
                center: new kakao.maps.LatLng(33.450701, 126.570667), //지도의 중심좌표.
                level: 3 //지도의 레벨(확대, 축소 정도)
            };

            var map = new kakao.maps.Map(container, options); //지도 생성 및 객체 리턴

            // 지도를 클릭했을때 클릭한 위치에 마커를 추가하도록 지도에 클릭이벤트를 등록합니다
            kakao.maps.event.addListener(map, 'click', function(mouseEvent) {        
                // 클릭한 위치에 마커를 표시합니다 
                addMarker(mouseEvent.latLng);             
            });

            // 지도에 표시된 마커 객체를 가지고 있을 배열입니다
            var markers = [];

            // 마커 하나를 지도위에 표시합니다 
            addMarker(new kakao.maps.LatLng(33.450701, 126.570667));

            // 마커를 생성하고 지도위에 표시하는 함수입니다
            function addMarker(position) {

                // 마커를 생성합니다
                var marker = new kakao.maps.Marker({
                    position: position
                });

                // 마커가 지도 위에 표시되도록 설정합니다
                marker.setMap(map);

                // 생성된 마커를 배열에 추가합니다
                markers.push(marker);
            }

            // 배열에 추가된 마커들을 지도에 표시하거나 삭제하는 함수입니다
            function setMarkers(map) {
                for (var i = 0; i < markers.length; i++) {
                    markers[i].setMap(map);
                }            
            }

            // "마커 보이기" 버튼을 클릭하면 호출되어 배열에 추가된 마커를 지도에 표시하는 함수입니다
            function showMarkers() {
                setMarkers(map)    
            }

            // "마커 감추기" 버튼을 클릭하면 호출되어 배열에 추가된 마커를 지도에서 삭제하는 함수입니다
            function hideMarkers() {
                setMarkers(null);    
            } 

        </script>
    </body>
</html>

 

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

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

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

개발자센터 API레퍼런스 / 구현예제 활용해보기

https://developers.naver.com/docs/papago/papago-nmt-api-reference.md

 

Papago 번역 API 레퍼런스 - Papago API

Papago 번역 API 레퍼런스 인공 신경망 기반 기계 번역 설명 인공 신경망 기반의 기계 번역(NMT, Neural Machine Translation) 결과를 반환합니다. 요청 URL https://openapi.naver.com/v1/papago/n2mt 프로토콜 HTTPS HTTP 메서드 POST 파라미터 파라미터 타입 필수 여부 설명 source String Y 원본 언어(source language)의 언어 코드 target String Y

developers.naver.com

 

타켓 언어 변경

예외처리

더보기
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.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);
		}
	}
}
import java.util.Scanner;

//PAPAGO
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.translateKorToEng(msg);
		}catch(Exception e) {
			e.printStackTrace();
			System.out.println("번역에 실패했습니다.");
		}
	}
}

 

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

[이미지업로드] summernote  (0) 2020.05.25
[WebAPI] 지도  (0) 2020.04.23
[WebAPI] 검색 API 추가  (0) 2020.04.23
[WebAPI] GSON  (0) 2020.04.23
[WebAPI] PAPAGO  (0) 2020.04.23

파파고 코드 수정

더보기
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;

public class NaverAPI {
	public static void translateKorToEng(String msg) {
		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);

		System.out.println(responseBody);
	}

	private static String post(String apiUrl, Map<String, String> requestHeaders, String text){
		HttpURLConnection con = connect(apiUrl);
		String postParams = "source=ko&target=en&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){
		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);
		}
	}
}
import java.util.Scanner;

//PAPAGO
public class Exam_01 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.print("영어로 번역할 한글 입력 : ");
		String msg = sc.nextLine();
		NaverAPI.translateKorToEng(msg);
		
	}
}

 


콘솔창

영어로 번역할 한글 입력 : 점심시간 2시간 30분 남았다.

{"message":{"@type":"response","@service":"naverservice.nmt.proxy","@version":"1.0.0","result":{"srcLangType":"ko","tarLangType":"en","translatedText":"Two and a half hours left for lunch.","engineType":"N2MT","pivot":null}}}

자바스크립트 오브젝트 노테이션 :자바스크립트 객체

JSON

{키:밸류 키:밸류}


1) 정규표현식으로 원하는 데이터 뽑아낼 수도 있음

2) JSON 분석 라이브러리

- 가장 많이 쓰는 라이브러리 JsonSimple : 하지만 한계가 있음

- 구글에서 제공하는 Json 분석 라이브러리 - Gson

gson-2.8.6.jar
0.23MB

https://mvnrepository.com/artifact/com.google.code.gson/gson/2.8.6

 

Maven Repository: com.google.code.gson » gson » 2.8.6

com.google.code.gson gson 2.8.6 // https://mvnrepository.com/artifact/com.google.code.gson/gson compile group: 'com.google.code.gson', name: 'gson', version: '2.8.6' // https://mvnrepository.com/artifact/com.google.code.gson/gson libraryDependencies += "co

mvnrepository.com


		System.out.println(responseBody);

 

메세지를 키값으로 하는 값이 또 오브젝트 (3중)

{"message":
	{"@type":"response","@service":"naverservice.nmt.proxy","@version":"1.0.0","result":
    	{"srcLangType":"ko","tarLangType":"en","translatedText":"Two and a half hours left for lunch.","engineType":"N2MT","pivot":null}}}

		JsonElement root = JsonParser.parseString(responseBody);
		JsonObject rootObj = root.getAsJsonObject();
		
		rootObj.getAsJsonObject(memberName)

JsonElement : 오브젝트인지, 배열인지 스트링인지, ... 알지못함 - 처음 가져온 프로토타입 (getAsJsonObject 없음)

JsonObject : 오브젝트 타입을 쓰기위해 치환 (getAsJsonObject 존재)


		JsonObject messageObj = rootObj.getAsJsonObject("message");

message 키값에 대한 밸류값 꺼내기

	{"@type":"response","@service":"naverservice.nmt.proxy","@version":"1.0.0","result":
    	{"srcLangType":"ko","tarLangType":"en","translatedText":"Two and a half hours left for lunch.","engineType":"N2MT","pivot":null}}

		JsonElement root = JsonParser.parseString(responseBody);
		JsonObject rootObj = root.getAsJsonObject();
		
		JsonObject messageObj = rootObj.getAsJsonObject("message");
		messageObj resultObj = messageObj.getAsJsonObject("result");
        
        //translatedText의 밸류값은 오브젝트가 아닌 스트링
        String message = resultObj.get("translatedText").getAsString();

//콘솔창

영어로 번역할 한글 입력 : 안녕

{"@type":"response","@service":"naverservice.nmt.proxy","@version":"1.0.0","result":{"srcLangType":"ko","tarLangType":"en","translatedText":"Hi.","engineType":"N2MT","pivot":null}}
{"srcLangType":"ko","tarLangType":"en","translatedText":"Hi.","engineType":"N2MT","pivot":null}
Hi.
더보기
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.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

public class NaverAPI {
	public static void translateKorToEng(String msg) {
		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){
		HttpURLConnection con = connect(apiUrl);
		String postParams = "source=ko&target=en&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){
		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);
		}
	}
}
import java.util.Scanner;

//PAPAGO
public class Exam_01 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.print("영어로 번역할 한글 입력 : ");
		String msg = sc.nextLine();
		NaverAPI.translateKorToEng(msg);
		
	}
}

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

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

https://developers.naver.com/main/

 

NAVER Developers

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

developers.naver.com


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

        String apiURL = "https://openapi.naver.com/v1/papago/n2mt";
        String text;
        try {
            text = URLEncoder.encode("안녕하세요. 오늘 기분은 어떻습니까?", "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);

        System.out.println(responseBody);
    }

    private static String post(String apiUrl, Map<String, String> requestHeaders, String text){
        HttpURLConnection con = connect(apiUrl);
        String postParams = "source=ko&target=en&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){
        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);
        }
    }

도스공격을 막기위한 인증

		String clientId = "YOUR_CLIENT_ID";//애플리케이션 클라이언트 아이디값";
		String clientSecret = "YOUR_CLIENT_SECRET";//애플리케이션 클라이언트 시크릿값";

 

Request 를 보내주려고 하는 url

		String apiURL = "https://openapi.naver.com/v1/papago/n2mt";

 

Client 측에서 Naver로 요청

Request (하나의 가방으로 생각해보기)

- 헤더 : SIP(샌더아이피) , DIP(데스티네이션아이피) , 브라우저 , Port번호, Data , 인코딩

- 바디영역 : 내용

 

Response


인코딩 : 텍스트가 깨지지 않도록함

		String text;
		try {
			text = URLEncoder.encode("안녕하세요. 오늘 기분은 어떻습니까?", "UTF-8");
		} catch (UnsupportedEncodingException e) {
			throw new RuntimeException("인코딩 실패", e);
		}

헤더 영역에 들어갈 내용을 Map으로 만듦

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

리퀘스트를 보내는 방식 (get방식 / post방식)

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

	private static String post(String apiUrl, Map<String, String> requestHeaders, String text){
		HttpURLConnection con = connect(apiUrl);
		String postParams = "source=ko&target=en&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();
		}
	}

자바 내장, 네트워크 통신 연결

		HttpURLConnection con = connect(apiUrl);

리퀘스트를 코드상으로 보내도록 해주는 기능 (검색창 버튼 누르지 않고 보내기)


인자값으로 받아서 보낼 데이터 세팅

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

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

 

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

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

+ Recent posts