윈도우 DOS cmd 에서 직접 실행 테스트 명령어 입니다.
curl "https://openapi.naver.com/v1/krdict/romanization?query=%EC%9D%B4%EB%8C%80%EB%B2%94" -H "X-Naver-Client-Id: 7N5QRQ2qyBTsccN9JDea" -H "X-Naver-Client-Secret: 5iruByskUW" -v
위의 KEY는 제 개인 발급키이며..
여러분도 https://developers.naver.com/docs/roman/overview/ 에서 발급 받으셔서 사용 하시면 됩니다.
바로 실행해서 결과 보시라고 공개하는 것입니다.
package com.erp.common;
//네이버 한글인명-로마자변환 Open API 예제
import java.io.BufferedReader;
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 org.json.JSONArray;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.erp.board.BoardController;
//네이버 한글인명-로마자변환 API 예제
public class ApiExamRoman
{
private static final String clientId = "7N5QRQ2qyBTsccN9JDea"; // 네이버 클라이언트 아이디
private static final String secret = "5iruByskUW"; // 네이버 클라이언트 시크릿 키
public static void main(String[] args) throws Exception
{
String called_name = null;
try {
called_name = URLEncoder.encode("이대범", "UTF-8");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("검색어 인코딩 실패",e);
}
String apiURL = "https://openapi.naver.com/v1/krdict/romanization?query="+ called_name;
Map<String, String> requestHeaders = new HashMap<>();
requestHeaders.put( "X-Naver-Client-Id" , clientId );
requestHeaders.put( "X-Naver-Client-Secret", secret );
String responseBody = get(apiURL,requestHeaders);
/*
// 다이렉터 테스트 시
String responseBody =
"{"
+ "\"aResult\":\r\n"
+ " [\r\n"
+ " {\r\n"
+ " \"sFirstName\":\"\\uc774\",\r\n"
+ " \"aItems\":[{\"name\":\"Lee Daebum\",\"score\":\"99\"},{\"name\":\"Lee Daebeom\",\"score\":\"76\"},{\"name\":\"Lee Deabum\",\"score\":\"27\"},{\"name\":\"Lee Deabeom\",\"score\":\"20\"}]\r\n"
+ " }\r\n"
+ " ]\r\n"
+ " }";
*/
/*
// JSONObjet : key-value
JSONObject jObject = new JSONObject(responseBody); // json 전체 데이터
JSONArray jArray = jObject.getJSONArray("aResult"); // 1번째 분할
String sFirstName;
// aResult 기준으로 배열 출력
for (int i = 0; i < jArray.length(); i++)
{
JSONObject obj = jArray.getJSONObject(i);
sFirstName = obj.getString("sFirstName");
System.out.println("sFirstName(" + i + "): " + sFirstName);
System.out.println("sFirstName(" + i + "): " + jArray.getJSONObject(0).getString("sFirstName"));
System.out.println();
// sub json array
JSONArray subArray = obj.getJSONArray("aItems");
System.out.println( "subArray : " + subArray );
for (int j = 0; j < subArray.length(); j++)
{
System.out.println("name(" + j + "): " + subArray.getJSONObject(j).getString("name"));
}
System.out.println();
}
*/
display_roma( responseBody,"aResult","sFirstName","aItems","name", "0" ); // 1 : 단일출력, 0 : 전체 출력
System.out.println("responseBody : " + responseBody);
}
/**
* json 3차배열 parser
* @param json_data
* @param div_txt_1
* @param dsp_nm_1
* @param div_txt_2
* @param dsp_nm_2
* @param flag
* @return
* @throws Exception
*/
private static String display_roma( String json_data, String div_txt_1, String dsp_nm_1, String div_txt_2, String dsp_nm_2, String flag ) throws Exception
{
// JSONObjet : key-value
JSONObject jObject = new JSONObject(json_data); // json 전체 데이터
JSONArray jArray = jObject.getJSONArray(div_txt_1); // 1번째 분할
String sFirstName;
String result = null;
// div_txt_1 기준으로 배열 출력
for (int i = 0; i < jArray.length(); i++)
{
JSONObject obj = jArray.getJSONObject(i);
sFirstName = obj.getString(dsp_nm_1);
System.out.println( dsp_nm_1 + "(" + i + "): " + sFirstName); // debug
System.out.println(); // debug
// div_txt_2 기준으로 배열 출력 sub json array
JSONArray subArray = obj.getJSONArray(div_txt_2);
System.out.println( "subArray : " + subArray );
for (int j = 0; j < subArray.length(); j++)
{
result += subArray.getJSONObject(j).getString(dsp_nm_2);
System.out.println("name(" + j + "): " + subArray.getJSONObject(j).getString(dsp_nm_2)); // debug
if( "1".equals(flag) ) break;
else continue;
}
System.out.println();
}
return result;
}
/**
*
* @param apiUrl
* @param requestHeaders
* @return
*/
public 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();
}
}
/**
*
* @param apiUrl
* @return
*/
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);
}
}
/**
*
* @param body
* @return
*/
private static String readBody(InputStream body)
{
InputStreamReader streamReader = new InputStreamReader(body);
try (BufferedReader lineReader = new BufferedReader(streamReader)) {
StringBuilder responseBody = new StringBuilder();
String line;
int count = 0;
while ((line = lineReader.readLine()) != null) {
if( count > 0) break;
responseBody.append(line);
System.out.println("line : " + line);
count++;
}
return responseBody.toString();
} catch (IOException e) {
throw new RuntimeException("API 응답을 읽는데 실패했습니다.", e);
}
}
}
|