Open InJunKangW opened 3 months ago
package com.nhnacademy.naver.controller;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.xml.XmlMapper; import com.nhnacademy.naver.BookDto; import com.nhnacademy.naver.BookResponse; import java.net.URI; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.RequestEntity; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder;
@Slf4j //@RestController @Controller @RequestMapping("/test") @RequiredArgsConstructor public class NaverController {
private final RestTemplate restTemplate;
@GetMapping
public String test(Model model) throws JsonProcessingException {
log.error("test called");
String clientId = "N9lkNYu0YvTUgd56Weib";
// 네이버 api 등록시 생긴 클라이언트 id
String clientSecret = "dQ_IKQZM55";
// 네이버 api 등록시 생긴 클라이언트 비밀번호
String rawString = "이해";
// 검색할 제목 byte[] bytes = rawString.getBytes(StandardCharsets.UTF_8);
String utf8EncodedString = new String(bytes, StandardCharsets.UTF_8);
URI uri = UriComponentsBuilder
.fromUriString("http://www.aladin.co.kr")
.path("/ttb/api/ItemSearch.aspx")
.queryParam("TTBKey","ttbjasmine066220924001")
.queryParam("Query",utf8EncodedString)
.queryParam("QueryType","Title")
.encode()
.build()
.toUri();
//제목 검색 - 리스트 보기.
// URI uri = UriComponentsBuilder // .fromUriString("http://www.aladin.co.kr") // .path("/ttb/api/ItemLookUp.aspx") // .queryParam("TTBKey","ttbjasmine066220924001") // .queryParam("ItemId","9791193528174") // .queryParam("ItemIdType", "ISBN13") // .encode() // .build() // .toUri(); //Isbn13으로 책 검색.
// URI uri = UriComponentsBuilder // .fromUriString("https://openapi.naver.com") // .path("/v1/search/book_adv.json") // .queryParam("d_titl",utf8EncodedString) // //검색할 제목의 utf-8 인코딩 된 값 //// .queryParam("lsbn") // .queryParam("start", 1) // .queryParam("display", 5) // .queryParam("sort", "sim") // .encode() // .build() // .toUri();
// RequestEntity
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> responseEntity = restTemplate.exchange(RequestEntity.get(uri).build(), String.class);
ObjectMapper objectMapper = new ObjectMapper();
String responseBody = responseEntity.getBody();
// JsonNode rootNode = objectMapper.readTree(responseBody); // JsonNode itemsNode = rootNode.path("items"); System.out.println("rep body : " + responseBody);
XmlMapper xmlMapper = new XmlMapper();
BookResponse bookResponse = xmlMapper.readValue(responseBody, BookResponse.class);
List<BookDto> bookList = bookResponse.getBooks();
//
// List
model.addAttribute("bookList", bookList);
return "test";
}
}
알라딘 book api 저희 요구조건을 위해선 네이버 말고 얘를 쓰는 게 나을 것 같습니다. (정가/할인가가 있어야 하는데 네이버에는 정가가 없어요)