반응형

#  Naver Search API 활용 도서정보를 입력하여 ISBN, IMAGE 검출하기

  • Naver Search API 연동, 도서정보를 입력(요청 변수 값) 하여 원하는 정보(ISBN, IMAGE) 검출. (Jsoup 사용)

## 준비물

 

책 - Search API

책 NAVER Developers - 검색 API 책 검색 개발가이드 검색 > 책 네이버 책 검색 결과를 출력해주는 REST API입니다. 비로그인 오픈 API이므로 GET으로 호출할 때 HTTP Header에 애플리케이션 등록 시 발급받은 C

developers.naver.com

  • 위 사이트 접속하여 '오픈 API 이용 신청' 버튼 클릭.

  • 아래와 같이 정보 입력하여 등록 신청.

  • 등록 완료 시 발급 되는 키 (Client ID, Client Secret) 이용하여 연동 진행.

## 작업 소스

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

import kr.inflearn.ExcelVO;

public class Project03_D {
	public static void main(String[] args) {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		try {
			System.out.print("책의 제목을 입력해주세요 : ");
			String title = br.readLine();
			System.out.print("책의 저자를 입력해주세요 : ");
			String author = br.readLine();
			System.out.print("출판사를 입력해주세요 : ");
			String company = br.readLine();
			
			ExcelVO vo = new ExcelVO(title, author, company);

			getIsbnImage(vo);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private static void getIsbnImage(ExcelVO vo) {
		try {
			String openApi = "https://openapi.naver.com/v1/search/book_adv.xml?d_titl=" 
					+ URLEncoder.encode(vo.getTitle(), "UTF-8") 
					+ "&d_auth=" + URLEncoder.encode(vo.getAuthor(), "UTF-8") 
					+ "&d_publ="+ URLEncoder.encode(vo.getCompany(), "UTF-8");
			
			URL url = new URL(openApi);
			HttpURLConnection con = (HttpURLConnection) url.openConnection();
			con.setRequestMethod("GET");
			con.setRequestProperty("X-Naver-Client-Id", "발급받은 Client_Id 입력");
			con.setRequestProperty("X-Naver-Client-Secret", "발급받은 Client_Secret 입력");
			
			int responseCode = con.getResponseCode();
			BufferedReader br1 = null;

			if (responseCode == 200) {
				br1 = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
			} else {
				br1 = new BufferedReader(new InputStreamReader(con.getErrorStream()));
			}
			
			String inputLine = null;
			StringBuffer response = new StringBuffer();
			
			while ((inputLine = br1.readLine()) != null) {
				response.append(inputLine);
			}
			br1.close();
			
			// ISBN, IMAGE 정보 꺼내기
			Document doc = Jsoup.parse(response.toString());
			Element total = doc.select("total").first();
			
			if (!total.text().equals("0")) {
				Element isbn = doc.select("isbn").first();
				String isbnStr = isbn.text();
				String isbn_find = isbnStr.split(" ")[1];
				vo.setIsbn(isbn_find);
				
				String imgDoc = doc.toString();
				String imgTag = imgDoc.substring(imgDoc.indexOf("<img>")+5);
				String imgURL = imgTag.substring(0, imgTag.indexOf("?"));
				System.out.println(imgURL);
				String fileName = imgURL.substring(imgURL.lastIndexOf("/")+1);
				System.out.println(fileName);
				vo.setImageUrl(fileName);
				System.out.println(vo);
			} else {
				System.out.println("검색된 데이터가 없습니다.");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
			
	}
}

## 출력 결과

  • 도서 정보 입력 후 확인 시 아래와 같이 출력 되는것을 확인할 수 있다.

 

반응형

+ Recent posts