스프링 입문

[스프링 입문] 7. 네이버 지역검색 api 연동해보기

코딩펭귄 2024. 1. 12. 15:12

1. 네이버 open api 사이트에서 오픈 api 이용신청 하기

https://developers.naver.com/products/service-api/search/search.md

 

검색 - SERVICE-API

검색 NAVER Developers - 검색 API 소개 웹, 뉴스, 블로그 등 분야별 네이버 검색 결과를 웹 서비스 또는 모바일 앱에서 바로 보여 줄 수 있습니다. 또한 ’OO역맛집’과 같은 지역 검색을 할 수도 있으

developers.naver.com

설정예시

 

2. 해당 페이지 참고하여 server 프로젝트에 코드 작성

https://developers.naver.com/docs/serviceapi/search/blog/blog.md#%EB%B8%94%EB%A1%9C%EA%B7%B8

 

검색 > 블로그 - Search API

검색 > 블로그 블로그 검색 개요 개요 검색 API와 블로그 검색 개요 검색 API는 네이버 검색 결과를 뉴스, 백과사전, 블로그, 쇼핑, 영화, 웹 문서, 전문정보, 지식iN, 책, 카페글 등 분야별로 볼 수

developers.naver.com

 

Talend API Test 사이트에서 헤더의 name과 value값은

네이버 API(내 Application) 에서  확인할 수 있다

@Slf4j
@RestController
@RequestMapping("/api/server")
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));
        //이렇게하면 총 인코딩이 2번이 돼서 오류발생함(주석처리 한 이유)

        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"))
                .build()
                .toUri();

        // 주소 잘 만들어졌는지 확인
        log.info("uri : {}", uri);


        RestTemplate restTemplate = new RestTemplate();


        // 헤더를 사용하기 위한것
        RequestEntity<Void> req = RequestEntity
                .get(uri)
                .header("X-Naver-Client-Id", "pYm6N0xbw_JgJTukhYgE")
                .header("X-Naver-Client-Secret", "o8aPLJ9oZs")
                .build();


        // 간단하게 String으로 받아서 네이버 api 연동해보기
        ResponseEntity<String> result = restTemplate.exchange(req, String.class);

        return result.getBody();