ballqs 님의 블로그
[Spring] Naver Open API 사용방법 본문
Spring을 이용하여 Naver Open API를 사용하려면 우선 아래사이트에 접근해야한다.
https://developers.naver.com/products/intro/plan/
애플리케이션 등록하기
등록하기 화면에서 작성해야하는 내용들이 있다.
애플리케이션 이름 , 사용 API , 비로그인 오픈 API 서비스 환경 등이 있으며 아래와 같이 작성했다.
등록이 완료되면 Client ID와 Client Secret를 발급받는다.
다만 중요해서 이미지를 잘라서 보여주겠다.
애플리케이션 사용하기
출처 :
https://developers.naver.com/docs/serviceapi/search/shopping/shopping.md#%EC%87%BC%ED%95%91
요청 URL
요청 URL | 반환 형식 |
https://openapi.naver.com/v1/search/shop.xml | XML |
https://openapi.naver.com/v1/search/shop.json | JSON |
파라미터
파라미터 | 타입 | 필수 여부 | 설명 |
query | String | Y | 검색어. UTF-8로 인코딩되어야 합니다. |
display | Integer | N | 한 번에 표시할 검색 결과 개수(기본값: 10, 최댓값: 100) |
start | Integer | N | 검색 시작 위치(기본값: 1, 최댓값: 1000) |
sort | String | N | 검색 결과 정렬 방법 - sim: 정확도순으로 내림차순 정렬(기본값) - date: 날짜순으로 내림차순 정렬 - asc: 가격순으로 오름차순 정렬 - dsc: 가격순으로 내림차순 정렬 |
filter | String | N | 검색 결과에 포함할 상품 유형 - 설정 안 함: 모든 상품(기본값) - naverpay: 네이버페이 연동 상품 |
exclude | String | N | 검색 결과에서 제외할 상품 유형. exclude={option}:{option}:{option} 형태로 설정합니다(예: exclude=used:cbshop). - used: 중고 - rental: 렌탈 - cbshop: 해외직구, 구매대행 |
요청시 참고사항
> GET /v1/search/shop.xml?query=%EC%A3%BC%EC%8B%9D&display=10&start=1&sort=sim HTTP/1.1
> Host: openapi.naver.com
> User-Agent: curl/7.49.1
> Accept: */*
> X-Naver-Client-Id: {애플리케이션 등록 시 발급받은 클라이언트 아이디 값}
> X-Naver-Client-Secret: {애플리케이션 등록 시 발급받은 클라이언트 시크릿 값}
작성코드
Controller
@RestController
@RequestMapping("/api")
public class NaverApiController {
private final NaverApiService naverApiService;
public NaverApiController(NaverApiService naverApiService) {
this.naverApiService = naverApiService;
}
@GetMapping("/search")
public List<ItemDto> searchItems(@RequestParam String query) {
return naverApiService.searchItems(query);
}
}
Service
@Slf4j(topic = "NAVER API")
@Service
public class NaverApiService {
private final RestTemplate restTemplate;
public NaverApiService(RestTemplateBuilder builder) {
this.restTemplate = builder.build();
}
public List<ItemDto> searchItems(String query) {
// 요청 URL 만들기
URI uri = UriComponentsBuilder
.fromUriString("https://openapi.naver.com")
.path("/v1/search/shop.json")
.queryParam("display", 15) // 한 번에 표시할 검색 결과 개수
.queryParam("query", query)// 검색어
.encode()
.build()
.toUri();
log.info("uri = " + uri);
RequestEntity<Void> requestEntity = RequestEntity
.get(uri)
.header("X-Naver-Client-Id", "Client-Id") // 발급 받은 Client-ID를 작성
.header("X-Naver-Client-Secret", "Client-Secret") // 발급 받은 Client-Secret를 작성
.build();
ResponseEntity<String> responseEntity = restTemplate.exchange(requestEntity, String.class);
log.info("NAVER API Status Code : " + responseEntity.getStatusCode());
return fromJSONtoItems(responseEntity.getBody());
}
public List<ItemDto> fromJSONtoItems(String responseEntity) {
JSONObject jsonObject = new JSONObject(responseEntity);
JSONArray items = jsonObject.getJSONArray("items");
List<ItemDto> itemDtoList = new ArrayList<>();
for (Object item : items) {
ItemDto itemDto = new ItemDto((JSONObject) item);
itemDtoList.add(itemDto);
}
return itemDtoList;
}
}
Dto
@Getter
@NoArgsConstructor
public class ItemDto {
private String title;
private String link;
private String image;
private int lprice;
public ItemDto(JSONObject itemJson) {
this.title = itemJson.getString("title");
this.link = itemJson.getString("link");
this.image = itemJson.getString("image");
this.lprice = itemJson.getInt("lprice");
}
}
'코딩 공부 > Spring' 카테고리의 다른 글
[Spring] JPA Save() vs SaveAll() vs Bulk Insert (0) | 2024.08.26 |
---|---|
[Spring] PasswordEncoder 암호화 및 bcrypt 암호화 (0) | 2024.08.23 |
[Spring] JWT(Json Web Tokens)란? (0) | 2024.08.19 |
[Spring] JPA(Java Persistence API)란? (0) | 2024.08.14 |
[Spring] @Valid 유효성 검사 , @ExceptionHandler , MethodArgumentNotValidException (0) | 2024.08.12 |