프로젝트/네이버 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<StringString> toMultiValueMap() {
        var map = new LinkedMultiValueMap<StringString>();
 
        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