Kakao REST API 로컬 연동

|

Kakao(Daum) API 를 이용하여 좌표 -> 주소로 변환하는 기능의 요구가 있어서 개발 겸 정리


JSON에서 주소 외의 데이터는 필요 없어서 바로 가져와서 처리함


Retrofit 으로 개발하다가 AsyncTask 방식으로도 만들어봄.



* Kakao에서 제공하는 REST API


GET /v2/local/geo/coord2address.{format} HTTP/1.1

Host: dapi.kakao.com

Authorization: KakaoAK {app_key}



1. AsyncTask 방식



class AddrHelper {

   

    private static final String KAKAO_REST_API = "http://dapi.kakao.com/v2/local/geo/coord2address.json?x=%s&y=%s&input_coord=%s";


    private class KakaoGetRESTApi extends AsyncTask<String, String, String> {

        @Override

        protected void onPreExecute() {

            super.onPreExecute();

        }


        @Override

        protected String doInBackground(String... strings) {

            String temp = "Not Gained";

            try{

                temp = GET(strings[0], strings[1], strings[2]);

                return temp;

            }catch(IOException e) {

                e.printStackTrace();

            }

            return temp;

        }


        @Override

        protected void onPostExecute(String s) {

            super.onPostExecute(s);

            Log.d("TASK", "POST " + s);

        }

    }


    public String run(String x, String y, String key) throws ExecutionException, InterruptedException {

        return new KakaoGetRESTApi().execute(x,y,key).get().replace("\"", "");

    }



    private String GET(String x, String y, String key) throws IOException{

        String myUrl = String.format(KAKAO_REST_API, x, y, "WGS84");

        Log.d("REST GET", "REQUEST URL = " + myUrl);

        InputStream inputStream = null;

        String returnString = "";

        String returnValue = "";


        int length = 1024;



        try{

            URL url = new URL(myUrl);


            HttpURLConnection conn = (HttpURLConnection) url.openConnection();

            conn.setRequestProperty("Authorization", "KakaoAK "+key);

            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

            conn.setRequestProperty("charset", "utf-8");

            conn.setReadTimeout(10000);

            conn.setConnectTimeout(15000);

            conn.setRequestMethod("GET");

            conn.setDoInput(true);

            conn.connect();

            int response = conn.getResponseCode();

            Log.d("REST GET", "The response is : " + response);

            inputStream = conn.getInputStream();

            JsonObject json = new JsonParser().parse(new InputStreamReader(inputStream, "UTF-8")).getAsJsonObject();


            json.getAsJsonArray("documents").get(0).getAsJsonObject().getAsJsonObject("address").getAsJsonPrimitive("address_name").toString();

            returnValue = json.getAsJsonArray("documents").get(0).getAsJsonObject().getAsJsonObject("address").getAsJsonPrimitive("address_name").toString();

            Log.d("REST GET", "The response is : " + returnValue);

        }catch (Exception e){

            Log.e("REST GET", "Error : "+e.getMessage());

        }finally {

            if(inputStream != null)

                inputStream.close();

        }

        return returnValue;

    }

}





2. retrofit 방식




    private interface ApiService{

        String base = "http://dapi.kakao.com/";

        String key = "XXXXXXXXXXXXXXXXXXXXXXXXXXX";


        @GET("v2/local/geo/coord2address.json")

        Call<JsonObject> getAddress(@Header("Authorization") String key, @Query("x") String lon, @Query("y") String lat, @Query("input_coord") String type);

    }




        Retrofit retrofit = new Retrofit.Builder().addConverterFactory(GsonConverterFactory.create())

                .baseUrl(ApiService.base)

                .build();

        ApiService api = retrofit.create(ApiService.class);

        Call<JsonObject> call = api.getAddress(key, lon, lat, type);


      //이후 JsonObject를 통해서 데이터 긁어오기

'Android > etc' 카테고리의 다른 글

다중 언어 및 해상도를 위한 리소스 폴더명  (0) 2018.10.12
암호화 적용 MessageDigest  (0) 2018.09.14
화면 회전을 센서로 체크하기.  (0) 2018.05.17
Android VLC Compile  (0) 2018.02.06
화면 코드로 회전 시키기  (0) 2018.01.23
And