- [API] 네이버 책검색 2020.02.07
2020. 2. 7. 11:17
json방식으로 조회
package textbook.naverAPI;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
public class NaverSearchAPI {
public String Search(String word) {
String clientId = "your client code";//애플리케이션 클라이언트 아이디값";
String clientSecret = "your client secret code";//애플리케이션 클라이언트 시크릿값";
StringBuffer response = null;
try {
String text = URLEncoder.encode(word, "UTF-8");
String apiURL = "https://openapi.naver.com/v1/search/book.json?query="+ text; // json 결과
// String apiURL = "https://openapi.naver.com/v1/search/book.xml?query="+ text; // xml 결과
URL url = new URL(apiURL);
HttpURLConnection con = (HttpURLConnection)url.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("X-Naver-Client-Id", clientId);
con.setRequestProperty("X-Naver-Client-Secret", clientSecret);
int responseCode = con.getResponseCode();
BufferedReader br;
if(responseCode==200) { // 정상 호출
br = new BufferedReader(new InputStreamReader(con.getInputStream()));
} else { // 에러 발생
br = new BufferedReader(new InputStreamReader(con.getErrorStream()));
}
String inputLine;
response = new StringBuffer();
while ((inputLine = br.readLine()) != null) {
response.append(inputLine);
}
br.close();
} catch (Exception e) {
System.out.println(e);
}
return response.toString();
}
}
ajax로 컨트롤러를 요청하고 / json으로 데이터를 받아서 처리하는 방법
function bookSearch(page) {
var url = "bookSearch.text";
var word = $("#word").val();/* 네이버 책 검색 */
var listArr = null;
var data = {
word : word,
}
$.ajax({
type : "post",
url : url,
data : data,
dataType : "json",
success : function(getData) {
console.log(getData);
console.log(getData.total);
var total = getData.total;
var start = getData.start;
var display = getData.display;
/* 페이지= index+1 */
$(".find").html(total);
listArr = new Array();
for (var i = 0; i < display; i++) {
listArr.push(getData.items[i]);
console.log(listArr[i].title);
}
var i = page-1;
$(".title ~ p").remove();
$(".title").after("<p>" + listArr[i].title + "</p>");
/*문자열 태그 제거필요*/
var titleEncode = encodeURIComponent(listArr[i].title);
$("#book_title").val(titleEncode);
$(".link ~ p").remove();
$(".link").after("<p>" + listArr[i].link + "</p>");
var linkEncode = encodeURIComponent(listArr[i].link);
$("#book_link").val(linkEncode);
$(".image ~ p").remove();
$(".image").after("<p>" + listArr[i].image + "</p>");
var imgEncode = encodeURIComponent(listArr[i].image);
$("#book_image").val(imgEncode);
$(".author ~ p").remove();
$(".author").after("<p>" + listArr[i].author + "</p>");
$("#book_author").val(listArr[i].author);
$(".price ~ p").remove();
$(".price").after("<p>" + listArr[i].price + "</p>");
$("#book_price").val(listArr[i].price);
$(".discount ~ p").remove();
$(".discount").after("<p>" + listArr[i].discount + "</p>");
$("#book_discount").val(listArr[i].discount);
$(".publisher ~ p").remove();
$(".publisher").after("<p>" + listArr[i].publisher + "</p>");
$("#book_publisher").val(listArr[i].publisher);
$(".pubdate ~ p").remove();
$(".pubdate").after("<p>" + listArr[i].pubdate + "</p>");
$("#book_pubdate").val(listArr[i].pubdate);
$(".isbn ~ p").remove();
$(".isbn").after("<p>" + listArr[i].isbn + "</p>");
$("#book_isbn").val(listArr[i].isbn);
$(".description ~ p").remove();
$(".description").after("<p>" + listArr[i].description + "</p>");
var encode = encodeURIComponent(listArr[i].description);
var decode = decodeURIComponent(listArr[i].description);
console.log(encode);
console.log(decode);
$("#book_description").val(encode);
},
error : function(request, status, error) {
alert("code = " + request.status + " message = "
+ request.responseText + " error = " + error);
console.log(error);
}
});
};
컨트롤러에서 처리방법
받은 데이터는 json방식이기때문에 jsonparse API 사용해서 파싱한다음 되돌려줌.
NaverSearchAPI search = new NaverSearchAPI();
String word = request.getParameter("word");
String result = search.Search(word);
JSONParser paser = new JSONParser();
Object obj = paser.parse(result);
JSONObject jsonObj = (JSONObject) obj;
// bookdetail.text jsp페이지에서 -> ${requestScope.result.items}
request.setAttribute("result", jsonObj);
System.out.println("get" + result);
PrintWriter out = response.getWriter();
out.print(jsonObj);
Ajax->controller->jsonparsing->return Ajax->success 파라미터로 값이 넘어오고 받아서 처리