728x90
반응형
##
NaverShopSearch 클래스를, 웹서비스에 이용할 수 있도록 발전시켜 보겠습니다.
1. 검색어를 요구에 따라 바꿀 수 있어야 합니다.
1) 검색어 바꾸기
- 문자열로 받아서 query주소에 넣기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
public String search(String query) { // 검색어 받아서
// ARC에서 가져온 네이버 api GET 코드
RestTemplate rest = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.add("X-Naver-Client-Id", "Y2PMCJtP_nbIC3jX1Xv6"); // 네이버에서 발급받은 id
headers.add("X-Naver-Client-Secret", "qRV0POeqMQ"); // 네이버에서 발급받은 secret
String body = "";
HttpEntity<String> requestEntity = new HttpEntity<String>(body, headers);
// 밑의 코드에서 호출 url 변수에 검색어나 여러 변수 설정 가능
ResponseEntity<String> responseEntity = rest.exchange("https://openapi.naver.com/v1/search/shop.json?query="+query, HttpMethod.GET, requestEntity, String.class);
HttpStatus httpStatus = responseEntity.getStatusCode();
int status = httpStatus.value();
String response = responseEntity.getBody();
System.out.println("Response status: " + status);
System.out.println(response);
return response;
}
|
cs |
2. 검색 결과를 문자열에서 DTO로 바꿔야 합니다.
1)org.json 패키지 설치하기 : JSON을 자바에서 다루기 위해, JSONObject, JSONArray 클래스가 필요
-사이트https://mvnrepository.com/ 접속-> json 검색-> json in java -> 사용자 많은 버전 선택-> gradle 탭 선택 -> 인인텔리제이 build.gradle 파일dependencies에 복붙-> dependencies 실행->gradle 새로고침
2)ItemDto 생성하기
: JSONObject 의 정보의 매개체
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
package com.sparta_spring.sparta_spring_week04.models;
import lombok.Getter;
import org.hibernate.cache.spi.support.AbstractReadWriteAccess;
import org.json.JSONObject;
@Getter
public class ItemDto { // 네이버 검색 결과 상품의 정보의 매개체
private String title;
private String image;
private int lprice;
private String link;
// 다른 DTO는 같은 Product 객체를 전달한 거여서 @RequiredArgConstruct 가자동 완성했지만
// ItemDto JSONOject 를 받는 거여서 생성자 따로 생성
public ItemDto(JSONObject itemJson){
this.title = itemJson.getString("title");
this.image = itemJson.getString("image");
this.lprice = itemJson.getInt("lprece");
this.link = itemJson.getString("link");
}
}
|
cs |
3)fromJSONtoItems 메소드 만들기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
// 검색된 상품들 JSON객체에서 -> ItemDto리스트로 반환 메서드
public List<ItemDto> fromJSONtoItems(String result) {
JSONObject rjson = new JSONObject(result); // 네이버 검색 결과 문자열 -> json객체로 변환
System.out.println(rjson); // 검색된json 객체 확인
JSONArray items = rjson.getJSONArray("items"); // 검색된 json객체에서 키값이 items인 json 리스트 추출
// 받아온 items 를 List에다가 저장
List<ItemDto> itemDtoList = new ArrayList<>();
for (int i = 0; i < items.length(); i++) {
JSONObject itemJson = items.getJSONObject(i); // i번째 인덱스의 json객체를 가져와라
//System.out.println(itemJson);
// 추출된 하나의 객체에서 상품이름,사진,최저가,링크 출력확인
// String title = itemJson.getString("title");
// String image = itemJson.getString("image");
// int lprice = itemJson.getInt("lprice");
// String link = itemJson.getString("link");
// System.out.println(lprice);//
// ItemDto 객체로 변환해 ArrayList 에 저장장
ItemDto itemDto = new ItemDto(itemJson);
itemDtoList.add(itemDto);
}
return itemDtoList;
}
|
cs |
## NaverShopSearch 클래스 결과물
- 네이버 api로 검색->검색결과 문자열로 반환
-> 문자열 -> JSONObject로 변환
-> JSONObject 에서 item들을 담은 리스트를 JSONArray형태로 추출
-> JSONArray의 각각의 JSONObject를 추출해 ItemDto 클래스로 정보를 저장해 List<itemDto> 의 리스트로 변환
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
|
package com.sparta_spring.sparta_spring_week04.utils;
import com.sparta_spring.sparta_spring_week04.models.ItemDto;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.http.*;
import org.springframework.web.client.RestTemplate;
import java.util.ArrayList;
import java.util.List;
public class NaverShopSearch {
public String search(String query) { // 검색어 받아서
// ARC에서 가져온 네이버 api GET 코드
RestTemplate rest = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.add("X-Naver-Client-Id", "Y2PMCJtP_nbIC3jX1Xv6"); // 네이버에서 발급받은 id
headers.add("X-Naver-Client-Secret", "qRV0POeqMQ"); // 네이버에서 발급받은 secret
String body = "";
HttpEntity<String> requestEntity = new HttpEntity<String>(body, headers);
// 밑의 코드에서 호출 url 변수에 검색어나 여러 변수 설정 가능
ResponseEntity<String> responseEntity = rest.exchange("https://openapi.naver.com/v1/search/shop.json?query="+query, HttpMethod.GET, requestEntity, String.class);
HttpStatus httpStatus = responseEntity.getStatusCode();
int status = httpStatus.value();
String response = responseEntity.getBody();
System.out.println("Response status: " + status);
System.out.println(response);
return response;
}
// 검색된 상품들 JSON객체에서 -> ItemDto리스트로 반환 메서드
public List<ItemDto> fromJSONtoItems(String result) {
JSONObject rjson = new JSONObject(result); // 네이버 검색 결과 문자열 -> json객체로 변환
System.out.println(rjson); // 검색된json 객체 확인
JSONArray items = rjson.getJSONArray("items"); // 검색된 json객체에서 키값이 items인 json 리스트 추출
// 받아온 items 를 List에다가 저장
List<ItemDto> itemDtoList = new ArrayList<>();
for (int i = 0; i < items.length(); i++) {
JSONObject itemJson = items.getJSONObject(i); // i번째 인덱스의 json객체를 가져와라
//System.out.println(itemJson);
// 추출된 하나의 객체에서 상품이름,사진,최저가,링크 출력확인
// String title = itemJson.getString("title");
// String image = itemJson.getString("image");
// int lprice = itemJson.getInt("lprice");
// String link = itemJson.getString("link");
// System.out.println(lprice);//
// ItemDto 객체로 변환해 ArrayList 에 저장장
ItemDto itemDto = new ItemDto(itemJson);
itemDtoList.add(itemDto);
}
return itemDtoList;
}
// 메인함수 실행해서 응답확인
// public static void main(String[] args) {
// NaverShopSearch naverShopSearch = new NaverShopSearch();
// String result = naverShopSearch.search("아이맥");
// JSONObject rjson = new JSONObject(result); // 네이버 검색 결과 문자열 -> json객체로 변환
// System.out.println(rjson); // 검색된json 객체 확인
// JSONArray items = rjson.getJSONArray("items"); // 검색된 json객체에서 키값이 items인 json 리스트 추출
// // 받아온 items 를 List에다가 저장
// List<ItemDto> itemDtoList = new ArrayList<>();
//
// for(int i=0;i<items.length();i++){
// JSONObject itemJson = items.getJSONObject(i); // i번째 인덱스의 json객체를 가져와라
// //System.out.println(itemJson);
// // 추출된 하나의 객체에서 상품이름,사진,최저가,링크 출력확인
//// String title = itemJson.getString("title");
//// String image = itemJson.getString("image");
//// int lprice = itemJson.getInt("lprice");
//// String link = itemJson.getString("link");
//// System.out.println(lprice);//
//
// // ItemDto 객체로 변환해 ArrayList 에 저장장
// ItemDto itemDto = new ItemDto(itemJson);
// itemDtoList.add(itemDto);
// }
//
// }
}
|
cs |
반응형
'SpringBoot > 스파르타 웹개발의 봄 spring' 카테고리의 다른 글
[스파르타 웹개발의 봄 spring] 04.10 HTML, CSS,JS,이미지 파일 준비하기 (0) | 2021.07.16 |
---|---|
[스파르타 웹개발의 봄 spring] 04.09 키워드로 상품 검색하기 - 네이버 API와 서비스 연결하기 (0) | 2021.07.16 |
[스파르타 웹개발의 봄 spring] 04.07 관심 상품 등록하기 (0) | 2021.07.15 |
[스파르타 웹개발의 봄 spring] 04.06 관심 상품 조회하기 (0) | 2021.07.15 |
[스파르타 웹개발의 봄 spring] 04.05 프로젝트 설계하기 (0) | 2021.07.15 |