nhnacademy-be6-code-quest / Role

This Team Role
0 stars 0 forks source link

aladin book api #10

Open InJunKangW opened 3 months ago

InJunKangW commented 3 months ago

알라딘 book api 저희 요구조건을 위해선 네이버 말고 얘를 쓰는 게 나을 것 같습니다. (정가/할인가가 있어야 하는데 네이버에는 정가가 없어요)

InJunKangW commented 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 req = RequestEntity // .get(uri) // .header("X-Naver-Client-Id", clientId) // .header("X-Naver-Client-Secret", clientSecret) // .build();

    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 bookList = new ArrayList<>(); // if (itemsNode.isArray()) { // for (JsonNode itemNode : itemsNode) { // BookDto bookDto = objectMapper.treeToValue(itemNode, BookDto.class); // bookList.add(bookDto); // } // } System.out.println(bookList);

    model.addAttribute("bookList", bookList);
    return "test";
}

}