diff --git a/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java b/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java index 35b923f..0a2f754 100644 --- a/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java +++ b/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java @@ -5,6 +5,7 @@ import com.palnet.biz.api.bas.flight.service.BasFlightService; import com.palnet.biz.api.comn.response.BasicResponse; import com.palnet.biz.api.comn.response.ErrorResponse; import com.palnet.biz.api.comn.response.SuccessResponse; +import com.palnet.comn.code.RSErrorCode; import com.palnet.comn.exception.CustomException; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -19,6 +20,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.io.*; +import java.net.URLEncoder; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -256,5 +258,27 @@ public class BasFlightController { return ResponseEntity.ok().body(new SuccessResponse<>(resultMap)); } + + //지역 검색 + @GetMapping("/plan/area/search") + public ResponseEntity searchArea(String query) throws ParseException { + String text = null; + try { + text = URLEncoder.encode(query, "UTF-8"); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException("검색어 ㅇ ㅣㄴ코딩 실패", e); + } + + String apiURL = "https://openapi.naver.com/v1/search/local.json?query=" + text + "&display=5"; + Map requestHeaders = new HashMap<>(); + requestHeaders.put("X-Naver-Client-Id", "WGEct3bJhQC0pyMsP_GK"); + requestHeaders.put("X-Naver-Client-Secret", "Q4K4OtUYol"); + String responseBody = basFlightService.searchArea(apiURL, requestHeaders); + + JSONParser parser = new JSONParser(); + Object obj = parser.parse(responseBody); + + return ResponseEntity.ok().body(new SuccessResponse<>(obj)); + } } diff --git a/src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightService.java b/src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightService.java index 248a48f..4ce2e4e 100644 --- a/src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightService.java +++ b/src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightService.java @@ -1,8 +1,16 @@ package com.palnet.biz.api.bas.flight.service; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; import com.palnet.comn.code.ErrorCode; @@ -520,4 +528,55 @@ public class BasFlightService { return result; } + + + //지역 검색 + public String searchArea(String apiUrl, Map requestHeaders) { + HttpURLConnection con = connect(apiUrl); + try { + con.setRequestMethod("GET"); + for(Map.Entry 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(); + } + } + + public 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); + } + } + + public 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); + } + } }