오늘은 dev.kakao페이지에서
키워드를 넣으면 검색한 키워드가 포함된 가게들의
데이터를 넘겨주는 api를 사용해서
맛집 탐색 프로그램을 구현해보겠습니다.
요구사항은 이렇습니다.
요구사항
15개의데이터를
주소
전화번호
상호명
중심자표와의 거리 출력
카카오 디벨로퍼 홈페이지입니다.
api의 데이터를 사용하려면 주어진 쿼리파라미터를 사용해서
주소를 구성하고
RestAPI키를 사용해서
인증을 해야 뽑아올 수 있습니다.
인증 방식도 개발자페이지에서 제시해줍니다.
그러면 주소를 먼저 구성해보겠습니다.
입력받은 키워드로 주소를 구성해야
원하는 데이터가 나오기 때문에
Scanner sc = new Scanner(System.in);
String search = sc.next();
문자열을 하나 입력받습니다.
이것을 쿼리 파라미터로 사용하려면
인코딩을 해야합니다. (★ ★ ★)
String encodedQuery = URLEncoder.encode(search, "UTF-8");
//주소는 URLEncoding과정이 필요
String address = "https://dapi.kakao.com/v2/local/search/keyword.json";
그리고 기존 제시한 주소를 문자열에 저장해주고
주소 뒤에 쿼리 파라미터를 붙여줍니다.
address += "?query=" + encodedQuery;
키워드를 넣기 위해 encoding된 문자열을 넣어줍니다.
쿼리 파라미터를 이을 때는 &문자를 붙여줘야 합니다.
address += "&x=127.3867458&y=36.3577577";
검색할 중심 지역을 쿼리로 추가합니다.
address +="&radius=5000";
중심 지역의 반경을 설정합니다.
address += "&sort=distance";
거리 순으로 정렬되게합니다.
이때 주소는 띄어쓰기가 없어야합니다.
띄어쓰기가 들어가게 되면 값으로 처리해서
페이지가 안열리게 됩니다.
주소가 완성되었으면 인증을 해야합니다.
"Authorization: KakaoAK ${REST_API_KEY}"
인증은 이런 형식으로 해야한다는데
이것은 키값 : Value 값 형식입니다.
헤더에 붙여줘야 하므로
키값 Value값의 자료형에 해당하는
HashMap을 사용하겠습니다.
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("Authorization", "KakaoAK 8d2e282a4bd0da67042f8cfcf8ac3a51");
HashMap의 첫번째 파라미터는 Authorization을 넣어주고
뒤에는 KakaoAK에 인증키를 붙여야합니다.
이 부분에서 가이드라인이 키값 : valu값 형식인지 몰라서
KakaoAK를 안붙여서 시간을 엄청 소비했었습니다.
InputStream is = puftHttpClient.download(address, headers);
그리고 InputStream에 라이브러리를 사용해서
주소와 header를 넣어줍니다.
String str = puftHttpClient.convert(is, "UTF-8");
그리고 변환까지 해주면 데이터가 넘어오게 됩니다.
이제 Parsing을 해야하는데
Parsing은 JSONSimple jar를 사용해서 진행하겠습니다.
JSONParser jp = new JSONParser();
JSONObject jo = (JSONObject) jp.parse(str);
기본 필요한 변수를 선언해 주고
데이터가 documents라는 배열 안에 들어있기 때문에
JSONObject jo3 = null;
JSONArray ja = (JSONArray) jo.get("documents");
배열을 넣을 객체와
documents에 접근하기 위한 변수를 선언해줍니다.
for(int i = 0; i < ja.size(); i++) {
jo3 = (JSONObject) ja.get(i);
System.out.println(jo3.get("address_name"));
System.out.println(jo3.get("phone"));
System.out.println(jo3.get("place_name"));
System.out.println(jo3.get("distance"));
System.out.println("--------------------");
}
배열에 담긴 데이터를 jo3객체에 넣어주고
데이터를 하나씩 출력합니다.
위치를 대전으로 설정했는데
데이터가 잘 출력되는 것을 확인했습니다.
Json 데이터를 뽑아와서
출력까지 해봤는데요.
쿼리 파라미터를 사용해서 주소를 작성할 때
키워드 값이 어디에 위치해야하는지 몰라서
혼란스러웠고
인증키를 사용해서 인증하는 과정에서는
해쉬맵의 두번 째 파라미터로 인증키가 아닌
앞에 Kakao AK에 띄어쓰기까지 붙였어야해서
개발 문서를 잘 읽어봐야겠다는 생각이 들었습니다.
'Java > 실습' 카테고리의 다른 글
[Java] 지하철 - JSON 실습 (0) | 2024.12.19 |
---|---|
[Java] 미세먼지 - 종합 실습 (0) | 2024.12.18 |
[Java] 기상청 (HTTP 실습) (0) | 2024.12.18 |
[Java] HTTP통신 (2) | 2024.12.18 |
[Java] Split과 Date 실습 (1) | 2024.12.17 |