사용된 API : Naver Maps OpenAPI

네이버 클라우드 플랫폼의Geocoding API를 사용
https://api.ncloud-docs.com/docs/ai-naver-mapsgeocoding-geocode

import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONTokener;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.*;

public class Project01_D {
    public static void main(String[] args) {
        // https://www.ncloud.com/ 로부터 가입후 얻어온 client_id, client_secret 값을 넣어준다.
        String client_id = "6yd5dlj11z";
        String client_secret = "7YyQB64C4CWyCuUR44plpdqZcECSqCT6pVGqoeBl";

        // System.in 을 이용해서 키보드로부터 값을 byte stream으로 입력 받는다
        // 주소는 문자이기 떄문에 InputStreamReader 클래스로 연결해서 받는다.
        // 문자 스트림을 한줄 단위로 읽어 들이기 위해 BufferedReader 로 연결 해준다.
        BufferedReader io = new BufferedReader(new InputStreamReader(System.in));

        try {
            System.out.print("주소를 입력 하세요 : ");
            String address = io.readLine(); // 한 라인을 읽어 들인다.
            String addr = URLEncoder.encode(address, "UTF-8"); // 입력한 주소의 공백 등을 문자로 처리 하기 위해 인코딩 해준다.(공백=>%20으로 변경)
            String reqUrl = "https://naveropenapi.apigw.ntruss.com/map-geocode/v2/geocode?query="+addr;

            URL url = new URL(reqUrl); // 입력 받은 url이 정상적인지 확인하기 위하여 URL객체로 생성.
            HttpURLConnection con = (HttpURLConnection) url.openConnection(); // URL객체에 openConnection을 사용하여 연결 시도
            // 요청 헤더의 메서드와 필수 값인 X-NCP-APIGW-API-KEY-ID, X-NCP-APIGW-API-KEY 값을 싣어 전송해준다.
            con.setRequestMethod("GET");
            con.setRequestProperty("X-NCP-APIGW-API-KEY-ID", client_id);
            con.setRequestProperty("X-NCP-APIGW-API-KEY", client_secret);

            BufferedReader br;
            int responseCode = con.getResponseCode(); // 정상적으로 연결이 되었을 경우 200 값이 넘어 온다.

            // getInputStream() 을 통해 값을 읽어 오는데 이것은 byte 스트림 이다.
            // 문자 단위로 바꾸기 위해 InputStreamReader를 사용.
            // 라인 단위로 읽어 들이기 위해 다시한번 BufferedReader를 사용.
            if (responseCode == 200) {
                br = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8")); // 성공시
            } else {
                br = new BufferedReader(new InputStreamReader(con.getErrorStream())); // 에러시 getErrorStream을 사용
            }

            String line;
            StringBuffer response = new StringBuffer();
            while ((line = br.readLine()) != null) { // 가져온 주소 데이터의 readLine()를 이용해 한줄을 읽어서 line 스트링 변수에 담는다.
                response.append(line); // 스프링버퍼 변수에 읽어 들인 값을 담아주면 response 값에 모든 값이 문자열로 담긴다.
            }
            br.close();

            // response 안에 있는 JSON을 String Tokenizer를 이용해서 JSON 객체로 바꾸는 작업.
            JSONTokener tokener = new JSONTokener(response.toString()); // JSON 객체로 문자열을 메모리에 올린다.
            JSONObject object = new JSONObject(tokener); // JSON Object로 만들어준다.
            System.out.println(object.toString(2));

            JSONArray arr = object.getJSONArray("addresses"); // 객체안에 있는 Address의 값들을 배열로 읽어 들인다.
            // 주소 정보는 거의 1개가 오기 때문에 굳이 반복문을 쓸 필요는 없음.
            for(int i=0; i<arr.length(); i++) {
                JSONObject temp = (JSONObject) arr.get(i);
                System.out.println("address: " + temp.get("roadAddress"));
                System.out.println("jibunAddress: " + temp.get("jibunAddress"));
                System.out.println("경도 : " + temp.get("x"));
                System.out.println("위도 : " + temp.get("y"));
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

 

# 출처 : Inflearn - Java TPC 실전 프로젝트의 내용을 실습 하며 정리한 내용 입니다.

+ Recent posts