2016-04-03 12:20:05 +00:00
|
|
|
import json, re
|
2018-09-24 14:13:27 +00:00
|
|
|
from src import Utils
|
2016-03-29 11:56:58 +00:00
|
|
|
|
|
|
|
URL_GOOGLEBOOKS = "https://www.googleapis.com/books/v1/volumes"
|
2016-04-03 12:20:05 +00:00
|
|
|
URL_BOOKINFO = "https://books.google.co.uk/books?id=%s"
|
|
|
|
REGEX_BOOKID = re.compile("id=([\w\-]+)")
|
2016-03-29 11:56:58 +00:00
|
|
|
|
|
|
|
class Module(object):
|
|
|
|
_name = "ISBN"
|
2018-09-02 18:54:45 +00:00
|
|
|
def __init__(self, bot, events, exports):
|
2016-03-29 11:56:58 +00:00
|
|
|
self.bot = bot
|
2018-09-19 12:25:12 +00:00
|
|
|
events.on("received.command.isbn").hook(self.isbn,
|
|
|
|
help="Get book information from a provided ISBN",
|
2016-04-06 11:02:44 +00:00
|
|
|
min_args=1, usage="<isbn>")
|
2018-09-19 12:25:12 +00:00
|
|
|
events.on("received.command.book").hook(self.book,
|
|
|
|
help="Get book information from a provided title",
|
2016-04-06 11:02:44 +00:00
|
|
|
min_args=1, usage="<book title>")
|
2016-03-29 11:56:58 +00:00
|
|
|
|
2016-04-03 12:20:05 +00:00
|
|
|
def get_book(self, query, event):
|
2016-03-29 11:56:58 +00:00
|
|
|
page = Utils.get_url(URL_GOOGLEBOOKS, get_params={
|
2016-04-03 12:20:05 +00:00
|
|
|
"q": query, "country": "us"}, json=True)
|
2016-03-29 11:56:58 +00:00
|
|
|
if page:
|
|
|
|
if page["totalItems"] > 0:
|
|
|
|
book = page["items"][0]["volumeInfo"]
|
|
|
|
title = book["title"]
|
2016-04-03 12:20:05 +00:00
|
|
|
sub_title = (", %s" % book.get("subtitle")
|
|
|
|
) if book.get("subtitle") else ""
|
2018-07-22 19:53:44 +00:00
|
|
|
|
|
|
|
authors = ", ".join(book.get("authors", []))
|
|
|
|
authors = " - %s" % authors if authors else ""
|
|
|
|
|
|
|
|
date = book.get("publishedDate", "")
|
|
|
|
date = " (%s)" % date if date else ""
|
|
|
|
|
|
|
|
rating = book.get("averageRating", -1)
|
|
|
|
rating = " (%s/5.0)" % rating if not rating == -1 else ""
|
|
|
|
|
2016-04-03 12:20:05 +00:00
|
|
|
id = re.search(REGEX_BOOKID, book["infoLink"]).group(1)
|
2018-07-22 19:53:44 +00:00
|
|
|
info_link = " %s" % (URL_BOOKINFO % id)
|
|
|
|
event["stdout"].write("%s%s%s%s%s%s" % (
|
2016-04-03 12:20:05 +00:00
|
|
|
title, authors, date, sub_title, info_link, rating))
|
2016-03-29 11:56:58 +00:00
|
|
|
else:
|
|
|
|
event["stderr"].write("Unable to find book")
|
|
|
|
else:
|
|
|
|
event["stderr"].write("Failed to load results")
|
2016-04-03 12:20:05 +00:00
|
|
|
|
|
|
|
def isbn(self, event):
|
|
|
|
isbn = event["args_split"][0]
|
|
|
|
if len(isbn) == 10:
|
|
|
|
isbn = "978%s" % isbn
|
|
|
|
isbn = isbn.replace("-", "")
|
|
|
|
self.get_book("isbn:%s" % isbn, event)
|
|
|
|
|
|
|
|
def book(self, event):
|
|
|
|
self.get_book(event["args"], event)
|