챗봇 만들기 — 중고 도서 검색 챗봇

Dongho Jeong
BotHub.Studio (ko)
Published in
6 min readNov 27, 2018
출처 Pixabay

중고 도서는 새 책에 비해 싸다는 장점이 있지만 도서 상태와 재고에 대한 불확실성을 가지고 있어 과거에는 수요가 비교적 많지 않았습니다. 하지만 최근에 이른바 기업형 중고 서점들이 등장하며 중고 도서에 대한 정보를 체계화하고 이를 온라인에서 편리하게 얻을 수 있게 되며 중고 도서에 대한 수요가 증가하고 있습니다.

개인적으로도 중고 도서를 많이 구매하는 편입니다. 중고 도서를 구매하는 과정 중 온라인으로 중고 도서의 정보를 검색하는 것은 최우선적으로 이루어집니다. 때문에 관련 사이트를 자주 들어가 확인을 하는 편인데 이를 챗봇으로 구현한다면 더 편리하지 않을까 싶습니다. 웹페이지 혹은 앱을 통해 도서 정보를 얻기 위해서는 수많은 GUI를 접해야 하고 그 과정 중에서 원하지 않는 정보를 접하기도 하기 때문입니다.

그래서 메신저 상에서 내가 원하는 도서에 대한 정보를 빠르고 간편하게 얻을 수 있도록 중고 도서 검색 챗봇을 만들어보고자 합니다.

만들어봅시다 :)

0. 준비사항

  • BotHub.Studio 계정 및 SDK 설치
  • Telegram Bot 생성

1. 중고 도서 사이트 분석하기

중고 도서 관련 데이터는 해당 기업이 제공하는 API를 사용하여 얻거나 해당 사이트를 크롤링하여 얻을 수 있습니다. 알라딘의 경우 ‘알라딘 Open API’를 제공하고 있습니다. 다만, 이를 이용하기 위해서는 알라딘 회원이어야 하고 TTB(Thanks to Blogger) 신청 후 알라딘으로부터 승인을 받아야만 사용할 수 있습니다.

이번 포스트는 간단한 예제를 위해, 알라딘의 OpenAPI를 사용하는 대신 알라딘 중고 매장 사이트를 크롤링하여 챗봇을 만들었습니다. 예제가 아닌 경우 OpenAPI 사용을 권장드립니다.

알라딘 중고매장 사이트 / 도서 검색 페이지

사이트 구조를 파악하기 위해 알라딘 중고 매장 사이트를 들어가 키워드로 ‘코파는 이야기’를 검색합니다. ‘도서 검색 페이지’에 출력되는 정보는 책 제목, 지은이, 출판사, 출판일, 매장명 등을 확인할 수 있습니다.

진짜 찾고자 하는 책인 ‘진짜 코파는 이야기’의 ‘대전은행점’을 클릭합니다.

알라딘 중고매장 사이트 / 매장 페이지

매장명을 클릭하여 얻을 수 있는 ‘매장 페이지’에서는 중고 도서의 구체적인 정보인 가격, 재고, 도서 위치 등을 확인할 수 있습니다. 사이트를 살펴보면 중고 도서의 경우 새 책을 구매하는 경우와 달리 매장 정보가 중요한 정보임을 알 수 있습니다. 동일한 품질의 새 책과 달리, 직접 매장에 가서 도서의 상태를 확인하고 책을 구매하게 되는 중고 도서의 특성을 반영해 페이지에 매장 정보를 명시한 것으로 보입니다.

2. 알라딘 중고 매장 사이트 크롤링하기

앞서 사이트를 살펴 본 결과 챗봇에는 다음과 같은 정보가 필요합니다:

  • 책 제목
  • 출판사, 출판일
  • 책 커버 이미지
  • 재고 보유 매장명
  • 재고 수, 위치
  • 가격

상위 4 항의 정보는 ‘도서 검색 페이지’에서 얻을 수 있고 나머지는 보유 매장명을 클릭하여 나오는 ‘매장 페이지’를 통해 얻을 수 있습니다. 이번 포스트에서는 ‘도서 검색 페이지’의 정보만 크롤링하여 챗봇에서 제공하고 ‘매장 페이지’의 정보는 페이지 링크를 연결해 웹페이지 상에서 확인하도록 합니다.

BeautifulSoup로 크롤링해봅시다. BeautifulSoup의 경우 Python 기본 라이브러리가 아닙니다. 이런 경우 BotHub 프로젝트 폴더 안 requirements.txt에 추가적으로 설치해야 할 라이브러리 명을 적어줍니다. 지금같은 경우 beautifulsoup4를 requirements.txt에 추가해줍니다. (더 자세한 안내가 필요하신 경우 여기를 눌러 확인해주세요.)

3. Bot 연결하기

원하는 데이터를 얻을 준비가 되었으니 이제 챗봇과 연동해봅시다. BotHub을 활용하면 메신저와 연동된 챗봇을 간편하게 만들 수 있습니다. 이번 포스트에서 다루는 챗봇은 telegram과 연동된 챗봇으로 챗봇에서 제공해야할 기능들을 나열해 봅시다:

  • 도서 리스트 출력
  • 해당 도서를 보유하고 있는 매장 출력
  • 매장 내 해당 도서 관련 정보 출력

앞서 언급했듯, 세 번째 항의 경우 웹페이지 링크를 통해 구현하도록 합니다.

도서 리스트 출력

도서 정보 리스트는 search_book(keyword)로부터 크롤링한 데이터를 넘겨받아 BotHub.Studio에서 제공하는 함수를 이용해 출력합니다. 도서 정보는 크게 도서 커버 이미지, 도서 정보 텍스트, 재고 현황 버튼으로 구성되는데,
도서 커버 이미지는 send_photo(url) 를 통해,
도서 정보 텍스트는 send_message(message) 를 통해,
재고 현황 버튼은 quick reply 버튼을 통해 구현합니다.

재고 정보 출력하기

매장 리스트는 ‘재고 현황’ 버튼을 클릭할 경우 출력되는 것으로 ‘재고 현황’ 버튼의 콜백 함수로 my_callback_query(event, data)함수를 연결합니다. my_callback_query(event, data)는 callback과 함께 넘겨받은 데이터를 바탕으로 도서의 재고를 보유하고 있는 매장의 리스트를 url 버튼으로 구성해 출력합니다.

마무리

해당 챗봇은 텔레그램에서 ala&ala를 검색하여 사용하실 수 있습니다. 예제에서는 알라딘에서 제공하는 데이터만을 활용하였지만 알라딘 뿐만 아니라 다른 곳에서 제공하는 정보를 한데 모아 제공한다면 중고 도서 매니아들에게 의미 있는 챗봇이 될 것입니다.

BotHub.Studio에 지금 가입하셔서 챗봇을 만들어보세요 :)

PS. 본 아티클 관련 문의는 BotHub.Studio Community를 통해 지원받으실 수 있습니다. 챗봇 도입 및 제휴 문의는 bothub@bothub.sutdio로 연락해주세요.

--

--