def post(self, id, isbn): book_id = int(id) if not isbn.isdigit(): raise web.HTTPError(400, reason=_(u'ISBN参数错误')) mi = self.db.get_metadata(book_id, index_is_id=True) if not mi: raise web.HTTPError(404, reason=_(u'书籍不存在')) if not self.is_admin() and not self.is_book_owner( book_id, self.user_id()): raise web.HTTPError(403, reason=_(u'无权限')) title = re.sub(u'[((].*', "", mi.title) if isbn == baike.BAIKE_ISBN: api = baike.BaiduBaikeApi(copy_image=True) refer_mi = api.get_book(title) else: mi.isbn = isbn api = douban.DoubanBookApi(copy_image=True) refer_mi = api.get_book(mi) if mi.cover_data[0]: refer_mi.cover_data = None mi.smart_update(refer_mi, replace_metadata=True) self.db.set_metadata(book_id, mi) return self.redirect('/book/%d' % book_id)
def post(self, id): isbn = self.get_argument("isbn", "error") book_id = int(id) if not isbn.isdigit(): return {'err': 'params.isbn.invalid', 'msg': _(u'ISBN参数错误')} mi = self.db.get_metadata(book_id, index_is_id=True) if not mi: return {'err': 'params.book.invalid', 'msg': _(u'书籍不存在')} if not self.is_admin() and not self.is_book_owner( book_id, self.user_id()): return {'err': 'user.no_permission', 'msg': _(u'无权限')} title = re.sub(u'[((].*', "", mi.title) if isbn == baike.BAIKE_ISBN: api = baike.BaiduBaikeApi(copy_image=True) refer_mi = api.get_book(title) else: mi.isbn = isbn api = douban.DoubanBookApi(CONF['douban_apikey'], copy_image=True) refer_mi = api.get_book(mi) if mi.cover_data[0]: refer_mi.cover_data = None mi.smart_update(refer_mi, replace_metadata=True) self.db.set_metadata(book_id, mi) return {'err': 'ok'}
def get(self, id): book_id = int(id) mi = self.db.get_metadata(book_id, index_is_id=True) title = re.sub(u'[((].*', "", mi.title) api = douban.DoubanBookApi(CONF['douban_apikey'], copy_image=False) # first, search title books = api.get_books_by_title(title) books = [] if books == None else books if books and mi.isbn and mi.isbn != baike.BAIKE_ISBN: if mi.isbn not in [b.get('isbn13', "xxx") for b in books]: book = api.get_book_by_isbn(mi.isbn) # alwayse put ISBN book in TOP1 if book: books.insert(0, book) books = [api._metadata(b) for b in books] # append baidu book api = baike.BaiduBaikeApi(copy_image=False) book = api.get_book(title) if book: books.append(book) keys = [ 'cover_url', 'source', 'website', 'title', 'author_sort', 'publisher', 'isbn', 'comments' ] rsp = [] for b in books: d = dict((k, b.get(k, '')) for k in keys) d['pubyear'] = b.pubdate.strftime("%Y") if b.pubdate else "" if not d['comments']: d['comments'] = u'无详细介绍' rsp.append(d) return {'err': 'ok', 'books': rsp}
def get(self, id): book_id = int(id) mi = self.db.get_metadata(book_id, index_is_id=True) title = re.sub(u'[((].*', "", mi.title) api = douban.DoubanBookApi(copy_image=False) # first, search title books = api.get_books_by_title(title) if mi.isbn and mi.isbn != baike.BAIKE_ISBN: if mi.isbn not in [ b.get('isbn13', "xxx") for b in books ]: book = api.get_book_by_isbn(mi.isbn) # alwayse put ISBN book in TOP1 if book: books.insert(0, book) books = [ api._metadata(b) for b in books ] # append baidu book api = baike.BaiduBaikeApi(copy_image=False) book = api.get_book(title) if book: books.append( book ) return self.html_page('book/refer.html', vars())