728x90
도서관 정보 나루에서 제공해주는 API를 json 방식으로 호출하여 화면에 보여주기
도서관 정보나루
function setCookie( name, value, expiredays ) { var todayDate = new Date(); todayDate.setDate( todayDate.getDate() + expiredays ); document.cookie = name + "=" + escape( value ) + "; path=/; expires=" + todayDate.toGMTString() + ";" } function closeWin(idx
www.data4library.kr
프로세서 흐름 : 도서관 이용자의 최근 대여 도서 5건의 isbn을 조회하여 API를 호출하고 추천해준 도서의 isbn을 가져와서 이용하는 도서관에 도서가 있는지 조회하고 도서관에 보유하고 있는 도서를 화면에서 보여주기
1] Controller
@GetMapping("/recommendList")
public String getRecommendList(HttpSession session, Model model) {
//session에 저장되어있는 회원 id와 도서관 코드를 getting해서 String타입을 업캐스팅
String memberId = (String) session.getAttribute("SID");
String libraryCode = (String) session.getAttribute("SLIBRARY");
//회원 id로 최근 대여한 5건의 도서 isbn을 조회 및 api 호출해서 추천 도서의 isbn을 list형태로 리턴
List<String> bookIsbn = recommendservice.recommendList(memberId);
// List 형태로 객체화
List<Book> book = new ArrayList<Book>();
//추천된 isbn 갯수만큼 반복문
for(int i =0 ; i<bookIsbn.size();i++) {
//isbn과 도서관 코드로 해당 도서가 도서관에 보유중인지 조회
List<Book> getBook = bookService.isbnSelectBook(bookIsbn.get(i), libraryCode);
if(getBook != null) {
book.addAll(getBook);
}else{
//getBook이 null 일때 isbn 없이 api 호출(미구현)
}
}
logger.info("book : {}", book);
model.addAttribute("book", book);
return "recommend/recommendList";
}
2] Service
public List<String> recommendList(String memberId){
// 회원 아이디로 대여한 도서의 isbn 조회
List<String> bookIsbn = rentMapper.selectIsbn(memberId);
//api호출하는 uri
String uri = "http://data4library.kr/api/recommandList?authKey=d30acf5969608e57f856c36ddd03e661e138d851efb484a2ddffc33ce70627d4"
+ "&isbn13=";
String line = null;
//조회한 도서 isbn을 담으려고 list 형태 객체화
List<String> isbnList = new ArrayList<String>();
//조회된 도서 isbn 크기만큼 반복문
for(int i =0; i < bookIsbn.size(); i++) {
uri += bookIsbn.get(i)+";";
}
uri += "&format=json";
logger.info("uri : {}",uri); // 완성된 uri 출력
try {
//uri 실행
URL url = new URL(uri);
URLConnection conn = url.openConnection();
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
line = br.readLine();
//실행하면 json타입을 데이터가 한줄의 String 타입으로 가져와지기 때문에 json 형태로 가공해줘야한다.
//json 라이브러리가 추가 되어있어야 사용할 수 있는 메서드
JSONParser parser = new JSONParser();
JSONObject obj = (JSONObject) parser.parse(line);
JSONObject response = (JSONObject) obj.get("response");
JSONArray docs = (JSONArray) response.get("docs");
//최대 200권의 도서를 추천해주는데 100권만 가져와서 리스트 형태로 담기
for(int i=0; i < 100;i++) {
JSONObject books = (JSONObject) docs.get(i);
JSONObject book = (JSONObject) books.get("book");
String isbn13 = (String) book.get("isbn13");
if(isbn13 != null) {
isbnList.add(isbn13);
}
}
// 각종 예외 처리
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
logger.info("isbnList : {}",isbnList);
return isbnList;
}
위에 JsonParser는 line에 한 줄로 담겨있는 값을
{"response":{"request":{"isbn13":"9788972756194;9788943305840;"},"resultNum":200,"docs":[{"book":{"no":1,"bookname":"82년생 김지영 :조남주 장편소설 ","authors":"지은이: 조남주","publisher":"민음사","publication_year":"2016","isbn13":"9788937473135","addition_symbol":"","vol":"","class_no":"813.7","bookImageURL":"https://bookthumb-phinf.pstatic.net/cover/112/111/11211133.jpg?type=m1&udate=20180530"}},{"book":{"no":2,"bookname":"언어의 온도 :말과 글에는 나름의 따뜻함과 차가움이 있다 ","authors":"지은이: 이기주","publisher":"말글터","publication_year":"2016","isbn13":"9791195522125","addition_symbol":"","vol":"","class_no":"818","bookImageURL":"http://image.aladin.co.kr/product/14842/6/cover/k742532452_1.jpg"}},{"book":{"no":3,"bookname":"가면산장 살인사건 ","authors":"지은이: 히가시노 게이고 ;옮긴이: 김난주","publisher":"재인","publication_year":"2014","isbn13":"9788990982575","addition_symbol":"","vol":"","class_no":"833.6","bookImageURL":"http://image.aladin.co.kr/product/4745/51/cover/899098257x_2.jpg"}},{"book":{"no":4,"bookname":"라플라스의 마녀 :히가시노 게이고 장편소설 ","authors":"지은이: 히가시노 게이고 ;옮긴이: 양윤옥","publisher":"현대문학","publication_year":"2016","isbn13":"9788972757573","addition_symbol":"","vol":"","class_no":"833.6","bookImageURL":"http://image.aladin.co.kr/product/7288/55/cover/8972757578_1.jpg"}},{"book":{"no":5,"bookname":"채식주의자:한강 연작소설","authors":"한강","publisher":"창비","publication_year":"2007","isbn13":"9788936433598","addition_symbol":"","vol":"","class_no":"813.6","bookImageURL":"https://bookthumb-phinf.pstatic.net/cover/033/094/03309417.jpg?type=m1&udate=20180609"}},{"book":{"no":6,"bookname":"7년의 밤 :정유정 장편소설 ","authors":"지은이: 정유정","publisher":"은행나무","publication_year":"2011","isbn13":"9788956604992","addition_symbol":"","vol":"","class_no":"813.7","bookImageURL":"http://image.aladin.co.kr/product/14712/55/cover/k202532053_1.jpg"}},{"book":{"no":7,"bookname":"살인자의 기억법 :김영하 장편소설 ","authors":"지은이: 김영하","publisher":"문학동네","publication_year":"2013","isbn13":"9788954622035","addition_symbol":"","vol":"","class_no":"813.7","bookImageURL":"https://bookthumb-phinf.pstatic.net/cover/072/622/07262295.jpg?type=m1&udate=20180314"}},{"book":{"no":8,"bookname":"기린의 날개 ","authors":"히가시노 게이고 지음 ;김난주 옮김","publisher":"재인","publication_year":"2017","isbn13":"9788990982674","addition_symbol":"","vol":"","class_no":"833.6","bookImageURL":"http://image.aladin.co.kr/product/10147/75/cover/8990982677_1.jpg"}},{"book":{"no":9,"bookname":"나는 나로 살기로 했다 :냉담한 현실에서 어른살이를 위한 to do list ","authors":"글·그림: 김수현","publisher":"마음의숲","publication_year":"2016","isbn13":"9791187119845","addition_symbol":"","vol":"","class_no":"818","bookImageURL":"http://image.aladin.co.kr/product/16751/86/cover/k642534567_2.jpg"}},{"book":{"no":10,"bookname":"오직 두 사람 :김영하 소설 ","authors":"지은이: 김영하","publisher":"문학동네","publication_year":"2017","isbn13":"9788954645614","addition_symbol":"","vol":"","class_no":"813.7","bookImageURL":"http://image.aladin.co.kr/product/10949/50/cover/8954645615_2.jpg"}}]}}
이렇게 json 방식으로 재가공시키는 방법이다.
{
"response":{
"request":{
"isbn13":"9788972756194;9788943305840;"},
"resultNum":200,"docs":[
{"book":{"no":1,"bookname":"82년생 김지영 :조남주 장편소설 ","authors":"지은이: 조남주","publisher":"민음사","publication_year":"2016","isbn13":"9788937473135","addition_symbol":"","vol":"","class_no":"813.7","bookImageURL":"https://bookthumb-phinf.pstatic.net/cover/112/111/11211133.jpg?type=m1&udate=20180530"}},
{"book":{"no":2,"bookname":"언어의 온도 :말과 글에는 나름의 따뜻함과 차가움이 있다 ","authors":"지은이: 이기주","publisher":"말글터","publication_year":"2016","isbn13":"9791195522125","addition_symbol":"","vol":"","class_no":"818","bookImageURL":"http://image.aladin.co.kr/product/14842/6/cover/k742532452_1.jpg"}},
{"book":{"no":3,"bookname":"가면산장 살인사건 ","authors":"지은이: 히가시노 게이고 ;옮긴이: 김난주","publisher":"재인","publication_year":"2014","isbn13":"9788990982575","addition_symbol":"","vol":"","class_no":"833.6","bookImageURL":"http://image.aladin.co.kr/product/4745/51/cover/899098257x_2.jpg"}},
{"book":{"no":4,"bookname":"라플라스의 마녀 :히가시노 게이고 장편소설 ","authors":"지은이: 히가시노 게이고 ;옮긴이: 양윤옥","publisher":"현대문학","publication_year":"2016","isbn13":"9788972757573","addition_symbol":"","vol":"","class_no":"833.6","bookImageURL":"http://image.aladin.co.kr/product/7288/55/cover/8972757578_1.jpg"}},
{"book":{"no":5,"bookname":"채식주의자:한강 연작소설","authors":"한강","publisher":"창비","publication_year":"2007","isbn13":"9788936433598","addition_symbol":"","vol":"","class_no":"813.6","bookImageURL":"https://bookthumb-phinf.pstatic.net/cover/033/094/03309417.jpg?type=m1&udate=20180609"}},
{"book":{"no":6,"bookname":"7년의 밤 :정유정 장편소설 ","authors":"지은이: 정유정","publisher":"은행나무","publication_year":"2011","isbn13":"9788956604992","addition_symbol":"","vol":"","class_no":"813.7","bookImageURL":"http://image.aladin.co.kr/product/14712/55/cover/k202532053_1.jpg"}},
{"book":{"no":7,"bookname":"살인자의 기억법 :김영하 장편소설 ","authors":"지은이: 김영하","publisher":"문학동네","publication_year":"2013","isbn13":"9788954622035","addition_symbol":"","vol":"","class_no":"813.7","bookImageURL":"https://bookthumb-phinf.pstatic.net/cover/072/622/07262295.jpg?type=m1&udate=20180314"}},
{"book":{"no":8,"bookname":"기린의 날개 ","authors":"히가시노 게이고 지음 ;김난주 옮김","publisher":"재인","publication_year":"2017","isbn13":"9788990982674","addition_symbol":"","vol":"","class_no":"833.6","bookImageURL":"http://image.aladin.co.kr/product/10147/75/cover/8990982677_1.jpg"}},
{"book":{"no":9,"bookname":"나는 나로 살기로 했다 :냉담한 현실에서 어른살이를 위한 to do list ","authors":"글·그림: 김수현","publisher":"마음의숲","publication_year":"2016","isbn13":"9791187119845","addition_symbol":"","vol":"","class_no":"818","bookImageURL":"http://image.aladin.co.kr/product/16751/86/cover/k642534567_2.jpg"}},
{"book":{"no":10,"bookname":"오직 두 사람 :김영하 소설 ","authors":"지은이: 김영하","publisher":"문학동네","publication_year":"2017","isbn13":"9788954645614","addition_symbol":"","vol":"","class_no":"813.7","bookImageURL":"http://image.aladin.co.kr/product/10949/50/cover/8954645615_2.jpg"}}
]
}
}
}
JSONObject로 book까지 접근해서 book 안의 isbn을 조회하여 isbnList에 추가해서 isbn을 리턴
반응형
'Backend > SpringBoot' 카테고리의 다른 글
Thymeleaf 문자열 조합 (0) | 2020.07.22 |
---|---|
에러 일기 (0) | 2020.07.21 |
Spring Boot - 외부 API xml 방식으로 호출 하기 (0) | 2020.07.06 |
SpringBoot 파일 업로드 & 다운로드 코드 분석 (0) | 2020.06.16 |
Spring Boot 리다이렉트하기 (0) | 2020.05.26 |
댓글