2023.02.09 - TIL

mil nil·2023년 2월 9일
0

TIL (Today I Learned)

목록 보기
62/74

네이버 지도 검색 API 사용하기

네이버 지도 API를 사용하였을 때 현재 내 위치를 확인하여 지도를 현재 위치 중심으로 두는 것은 완료하였다. (천 만 건까지는 무료)

<!DOCTYPE html>
<!-- 네이버 지도 API 예제 사용 -->
<html>
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
  <title>간단한 지도 표시하기</title>
  <script type="text/javascript" src="https://openapi.map.naver.com/openapi/v3/maps.js?ncpClientId=zi6w8887xq"></script>
</head>
<body>
<div id="map" style="width:100%;height:600px;"></div>

<script>
  var options = {
    enableHighAccuracy: true,
    timeout: 5000,
    maximumAge: 0
  };

  function success(pos) {
    var crd = pos.coords;
  };

  function error(err) {
    console.warn('ERROR(' + err.code + '): ' + err.message);
  };

  // 동기화를 위해 적용, 비동기일 시 지도가 먼저 나오고 현재 위치가 반영됨.
  function getCurrentPosition() {
    return new Promise(function (resolve, reject) {
      navigator.geolocation.getCurrentPosition(resolve, reject)
    });
  };

  function createMap(point) {
    var mapOptions = {
      center: new naver.maps.LatLng(point.coords.latitude, point.coords.longitude),
      zoom: 12
    };
    console.log(point.coords)
    return new naver.maps.Map('map', mapOptions);
  }

  getCurrentPosition().then(point => createMap(point))
  
</script>
</body>
</html>

https://rumor1993.tistory.com/77
네이버 지도 현재 위치 가져오기

그런데 문제는 검색이었다. 지역 검색에서 JSON으로 가져온 데이터를 따로 꺼내서 읽어오지 못하였다. (지역 검색 하루 천 건까지 무료)

<!-- 네이버 블로그 검색 API 예제 사용 -->
  public MapResponseDto search() {
    String clientId = "YOUR_CLIENT_ID"; //애플리케이션 클라이언트 아이디
    String clientSecret = "YOUR_CLIENT_PASSWORD"; //애플리케이션 클라이언트 시크릿

    Integer start = 1;
    Integer end = 5;
    Integer display = 5; // api상 한 번에 보여줄 수 있는 데이터 수는 최대 5개

    String text = null;
    try {
      text = URLEncoder.encode("헬스장", "UTF-8");
    } catch (UnsupportedEncodingException e) {
      throw new RuntimeException("검색어 인코딩 실패", e);
    }

    ArrayList<String> name = new ArrayList<>();

    for (int start_idx = start; start_idx <= end; start_idx += display) {

      String apiURL = "https://openapi.naver.com/v1/search/local.json?query=" + text    // JSON 결과
          + "&display=" + display + "&total=comment";
      //String apiURL = "https://openapi.naver.com/v1/search/blog.xml?query="+ text; // XML 결과

      Map<String, String> requestHeaders = new HashMap<>();
      requestHeaders.put("X-Naver-Client-Id", clientId);
      requestHeaders.put("X-Naver-Client-Secret", clientSecret);
      String responseBody = get(apiURL, requestHeaders);

      System.out.println(responseBody);
      JSONParser jsonParser = new JSONParser(responseBody);

      JSONPObject jsonpObject = new JSONPObject(jsonParser);
      jsonpObject.getValue("title");
      JsonArrayFormatVisitor

    }
    return null;

여러가지로 해결하지 못한 부분이 많다.

  • 검색 결과가 5개 이상 불러와지지 않는다.
    • api에서 최대로 보내주는 데이터 양이 정해져 있어서 그런 것으로 보인다.
    • 나로는 어찌할 방법이 없다.
  • JSON형식의 데이터를 내가 원하는 부분만 뽑지 못했다.
    • JSONObject를 사용하여 진행해야 하는 것 같은데 라이브러리를 받아야 하나..?

일단 이 부분은 놔두고 카카오에 더 간편한 방법이 있는 것 같아 해보기로 한다.

profile
자바 배우는 사람

0개의 댓글