본문 바로가기

컴퓨터/Site Parsing

Interpark 도서 정보 한 번에 가져오기

인터파크 도서의 경우, http://book.interpark.com/blog/bookpinion/bookpinionOpenAPIInfo.rdo에서 Open API 탭을 클릭했을 때 나오는 방법을 통해서 공식적으로 도서 검색 API를 제공하고, 하루에 10000개씩의 요청을 할 수 있다고 링크에서 확인할 수 있다.


그러나 어떤 오류인지는 모르겠지만, 이 요청 횟수가 하루마다 초기화가 되지 않고 계속 누적이 되는 문제가 발생하였다. 이 문제에 대해 인터파크 고객센터에 1:1 상담글을 올렸으나 아직까지도 답장이 없다. 아무래도 더 이상 이 API에 대해 지원을 하지 않는다라는 것과 너무 사용하는 사람이 없어서 유지보수를 하지 않아서 이러한 일이 발생했다고 볼 수도 있다.


그리고, 이러한 API는 한 번의 요청에 하나의 책 정보만 얻어낼 수 있기 때문에, 다양한 책의 가격에 대해서 알아내려면 그 책의 개수만큼 정도의 API를 호출해야 하기 때문에, 최대 1만개의 책의 데이터만 가지고 올 수 있으며, 한 번 호출하는 것과 여러 번(100번 이상) 호출하는 것을 비교했을 때, 당연히 한 번 호출하는 것이 좀 더 낫기 때문에, 이번 내용에서는 한 번의 호출로 여러 책의 정보를 얻어오는 방법에 대해서 살펴보고자 한다.


앞에서 Yes24의 경우에는 '최근 본 항목'에 가격이 같이 포함되어 있었지만, Interpark의 경우에는 가격 정보가 나타나 있지 않다. 그리고 XHR로 필터링을 해보더라도 가격 정보에 대한 데이터가 나와 있지 않아서 이 방법으로는 불가능하다고 결론을 내렸다.


그래서 다음으로 생각한 방법이 '북카트'였다. '북카트'의 경우 여러 책을 한 번에 주문할 수 있도록 도와주는 역할을 하기 때문에, 북카트에 한 번에 여러 책을 담을 수 있는 방법에 대해서 알아낼 수만 있다면 그 방법을 이용해 책을 북카트에 담고, 이후에 북카트 링크로 가면 여러 책에 대한 정보를 한 번에 얻을 수 있다는 장점이 있다.


다행히 Interpark의 경우에는 비회원인 경우에도 북카트 기능을 사용할 수 있게 해서 이 방법을 이용할 수 있다는 희망을 가질 수 있었다.


http://book.interpark.com/product/BookDisplay.do?sc.saNo=&_method=detail&sc.shopNo=0000400000&sc.prdNo=220208909&sc.dispNo=028023018004001

위 링크와 같은 책에 대한 상세정보 링크로 들어가서 북카트에 담기를 하면, 여기에 사용된 Javascript 함수는 하나의 책만 담을 수 있게 되어있다. 그렇기 때문에 이 방법은 비효율적인 방법이라는 것을 알 수 있었다.(왜냐하면 이렇게 했을 때, 더 많은 요청을 보내야 하기 때문이다.)


다음으로 생각한 방법이 검색을 했을 때, 그 검색 결과 페이지에서 여러 권의 책을 북카트에 담을 수 있다는 것을 떠올렸고, 그래서 이 때 사용하는 Javascript 함수를 얻어내고, 그 함수가 http://bsearch.interpark.com/common/js/common.js에 있는 함수라는 것을 알아내어 분석하여 id만 알고 있는 여러 책을 한 번의 요청으로 북카트에 담을 수 있는 링크와 방법을 알아내었다.


이 방법을 Python을 이용해 코딩해서 실행해본 결과 잘 작동하는 것을 확인 할 수 있었다. 귀찮아서 최대 몇 개까지의 책을 북카트에 담을 수 있는지는 제대로는 확인하지 못했지만, 대략 24개 정도까지 가능한 것으로 보인다.


Python code


태그