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)
Ejemplo n.º 2
0
    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'}
Ejemplo n.º 3
0
    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}
Ejemplo n.º 4
0
    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())