이것저것 해보기🌼

[Open API] 네이버 Open API 사용하기 본문

BE/Spring Boot

[Open API] 네이버 Open API 사용하기

realtree 2021. 7. 6. 14:52

오늘은 네이버의 Open API 중, 지역 검색 기능을 사용하는 방법에 대해 알아볼것이다.

 

네이버 Open API (지역 검색)

https://developers.naver.com/docs/serviceapi/search/local/local.md#%EC%A7%80%EC%97%AD

 

지역 - Search API

지역 NAVER Developers - 검색 API 지역 검색 개발가이드 검색 > 지역 네이버 지역 서비스에 등록된 각 지역별 업체 및 상호 검색 결과를 출력해주는 REST API입니다. 비로그인 오픈 API이므로 GET으로 호출

developers.naver.com

 

위 사이트에서 오픈 API 이용 신청을 하면, 내가 사용할 수 있도록 인증정보를 발급해준다.

이것을 활용해서 간단한 REST API를 만들어보자.

 

 

 

1. Postman 요청 날려보기

 

네이버 Open API 정보를 잘 확인해야한다.

 

출력포맷 JSON에 해당하는 URL을 확인하고,

필요한 요청변수도 확인한다.

 

제공되는 예시와 같이, Postman에서 GET을 호출했다.

Postman 요청:

 

예시는 증권사에 대한 정보검색인지, 아래와 같이 5개의 리스트가 JSON 포맷으로 응답이 온것을 확인해볼수 있었다.

{
    "lastBuildDate": "Tue, 06 Jul 2021 14:43:33 +0900",
    "total": 5,
    "start": 1,
    "display": 5,
    "items": [
        {
            "title": "유안타<b>증권</b>",
            "link": "http://www.myasset.com/",
            "category": "금융,보험>주식,증권",
            "description": "",
            "telephone": "",
            "address": "서울특별시 중구 을지로2가 185 유안타증권 빌딩",
            "roadAddress": "서울특별시 중구 을지로 76 유안타증권",
            "mapx": "310636",
            "mapy": "551982"
        },
        {
            "title": "도이치<b>증권</b>",
            "link": "",
            "category": "금융,보험>투자기관",
            "description": "",
            "telephone": "",
            "address": "서울특별시 종로구 공평동 17 센트로폴리스 A동 12층",
            "roadAddress": "서울특별시 종로구 우정국로 26 센트로폴리스 A동 11층",
            "mapx": "310409",
            "mapy": "552626"
        },
        {
            "title": "<b>주식</b>투자의신",
            "link": "https://multistock.modoo.at",
            "category": "금융,보험>주식,증권",
            "description": "",
            "telephone": "",
            "address": "서울특별시 용산구 한강로1가 64",
            "roadAddress": "서울특별시 용산구 한강대로 211 102동 1904호",
            "mapx": "309444",
            "mapy": "548821"
        },
        {
            "title": "뉴지스탁",
            "link": "http://newsystock.blog.me/",
            "category": "금융,보험>주식,증권",
            "description": "",
            "telephone": "",
            "address": "서울특별시 마포구 공덕동 370-4",
            "roadAddress": "서울특별시 마포구 백범로31길 21",
            "mapx": "307390",
            "mapy": "549907"
        },
        {
            "title": "<b>주식</b>투자1번지",
            "link": "http://cafe.naver.com/toozabooza",
            "category": "금융,보험>주식,증권",
            "description": "",
            "telephone": "",
            "address": "서울특별시 마포구 노고산동 106-89",
            "roadAddress": "서울특별시 마포구 서강로 136 아이비타워",
            "mapx": "306167",
            "mapy": "550738"
        }
    ]
}

 

 

 

2. REST API 작성하기

이제 Spring boot 로 직접 REST API 를 이용해 Open API를 활용해보자.

Parameter 중, "query"에 해당하는 정보는 "UTF-8"로 인코딩되어야함에 유의하여, 아래와 같은 코드를 작성하였다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package controller;
 
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.RequestEntity;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;
 
import java.net.URI;
import java.nio.charset.Charset;
 
@Slf4j
@RestController
@RequestMapping("/api")
public class ServerApiController {
 
    // https://openapi.naver.com/v1/search/local.json?
    // query=%EC%A3%BC%EC%8B%9D&display=10&
    // start=1&
    // sort=random
 
    @GetMapping("/naver")
    public String naver(){
 
        //String query = "갈비집";
        //String encode = Base64.getEncoder().encodeToString(query.getBytes(StandardCharsets.UTF_8));
 
        URI uri = UriComponentsBuilder
                .fromUriString("https://openapi.naver.com")
                .path("/v1/search/local.json")
                .queryParam("query","중국집")
                .queryParam("display",10)
                .queryParam("start",1)
                .queryParam("sort","random")
                .encode(Charset.forName("UTF-8"))
                .encode()
                .build()
                .toUri();
 
        RequestEntity<Void> req = (RequestEntity<Void>) RequestEntity
                .get(uri)
                .header("X-Naver-Client-Id","44kxy1gow7121Fh_pEFM")
                .header("X-Naver-Client-Secret","eravX0Dkgw")
                .build();
 
        //주소 로그 확인
        log.info("uri : {}",uri);
 
        RestTemplate restTemplate = new RestTemplate();
        ResponseEntity<String> result = restTemplate.exchange(req, String.class);
        return result.getBody();
    }
 
}
 
cs

 

GET이기 때문에 바로 검색창으로 호출시, 아래와 같이 

중구 다동의 중국집이 잘 나오는것을 확인해볼수 있다.