프로젝트/네이버 api를 이용한 검색사이트
네이버 api를 이용한 검색 사이트 (3)
lroot
2022. 10. 6. 02:03
728x90
반응형
1) 네이버 api 사용
- 지역
- 이미지
2. application.yml 로 수정 후 네이버API를 사용하기 위해 정보 입력
3. Naver api 연결
- NaverClient
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 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | package com.example.search.naver; import com.example.search.naver.dto.SearchImageReq; import com.example.search.naver.dto.SearchImageRes; import com.example.search.naver.dto.SearchLocalReq; import com.example.search.naver.dto.SearchLocalRes; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; @Component public class NaverClient { @Value("${naver.client.id}") private String naverClientId; @Value("${naver.client.secret}") private String naverSecret; @Value("${naver.url.search.local}") private String naverLocalSearchUrl; @Value("${naver.url.search.image}") private String naverImageSearchUrl; public SearchLocalRes searchLocal(SearchLocalReq searchLocalReq) { var uri = UriComponentsBuilder .fromUriString(naverLocalSearchUrl) .queryParams(searchLocalReq.toMultiValueMap()) .build() .encode() .toUri(); var headers = new HttpHeaders(); headers.set("X-Naver-Client-Id", naverClientId); headers.set("X-Naver-Client-Secret", naverSecret); headers.setContentType(MediaType.APPLICATION_JSON); var httpEntity = new HttpEntity<>(headers); var responseType = new ParameterizedTypeReference<SearchLocalRes>(){}; var responseEntity = new RestTemplate() .exchange( uri, HttpMethod.GET, httpEntity, responseType ); return responseEntity.getBody(); } public SearchImageRes searchImage(SearchImageReq searchImageReq) { var uri = UriComponentsBuilder .fromUriString(naverImageSearchUrl) .queryParams(searchImageReq.toMultiValueMap()) .build() .encode() .toUri(); var headers = new HttpHeaders(); headers.set("X-Naver-Client-Id", naverClientId); headers.set("X-Naver-Client-Secret", naverSecret); headers.setContentType(MediaType.APPLICATION_JSON); var httpEntity = new HttpEntity<>(headers); var responseType = new ParameterizedTypeReference<SearchImageRes>(){}; var responseEntity = new RestTemplate() .exchange( uri, HttpMethod.GET, httpEntity, responseType ); return responseEntity.getBody(); } } | cs |
- searchLocalReq
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 | package com.example.search.naver.dto; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; @Data @NoArgsConstructor @AllArgsConstructor public class SearchLocalReq { private String query = ""; private int display = 1; private int start =1; private String sort = "random"; public MultiValueMap<String,String> toMultiValueMap(){ var map = new LinkedMultiValueMap<String,String>(); map.add("query",query); map.add("display",String.valueOf(display)); map.add("start",String.valueOf(start)); map.add("sort",sort); return map; } } | cs |
- searchLocalRes
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 | package com.example.search.naver.dto; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.util.List; @Data @NoArgsConstructor @AllArgsConstructor public class SearchLocalRes { private String lastBuildDate; private int total; private int start; private int display; private List<SearchLocalItem> items; @Data @NoArgsConstructor @AllArgsConstructor public static class SearchLocalItem{ private String title; private String link; private String category; private String description; private String address; private String roadAddress; private int mapx; private int mapy; } } | cs |
- searchImageReq
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 | package com.example.search.naver.dto; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; @Data @NoArgsConstructor @AllArgsConstructor public class SearchImageReq { private String query = ""; private int display = 1; private int start = 1; private String sort = "sim"; private String filter = "all "; public MultiValueMap<String, String> toMultiValueMap() { var map = new LinkedMultiValueMap<String, String>(); map.add("query", query); map.add("display", String.valueOf(display)); map.add("start", String.valueOf(start)); map.add("sort", sort); map.add("filter", filter); return map; } } | cs |
-searchImageRes
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 | package com.example.search.naver.dto; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.util.List; @Data @NoArgsConstructor @AllArgsConstructor public class SearchImageRes { private String lastBuildDate; private int total; private int start; private int display; private List<SearchImageItem> items; @Data @NoArgsConstructor @AllArgsConstructor public static class SearchImageItem{ private String title; private String link; private String thumbnail; private String sizeheight; private String sizewidth; } } | cs |
4. Test
- NaverClientTest
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 | package com.example.search.naver; import com.example.search.naver.dto.SearchImageReq; import com.example.search.naver.dto.SearchLocalReq; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest public class NaverClientTest { @Autowired private NaverClient naverClient; @Test public void searchLocalTest() { var search = new SearchLocalReq(); search.setQuery("갈비집"); var result = naverClient.searchLocal(search); System.out.println(result); } @Test public void searchImageTest(){ var search = new SearchImageReq(); search.setQuery("갈비집"); var result = naverClient.searchImage(search); System.out.println(result); } } | cs |
- searchLocalTest
- serachImageTest