def get_read_history(user_id):
        collection_id = Collection.get_readcollection_id(user_id)
        # SQL
        conn = connect_sys_db()
        query = "SELECT book_id FROM collects WHERE collection_id = \'{collection_id}\'".format(
            collection_id=collection_id)
        db_result = read_sql(sql=query, con=conn)
        json_str = db_result.to_json(orient='index')
        ds = json.loads(json_str)
        result = []
        for index in ds:
            finish_date = Collection.get_book_read_date(
                user_id, ds[index]['book_id'])
            # Add book's finish_time and title and cover_url to result
            ds[index]['finish_time'] = finish_date
            book = Book(ds[index]['book_id'])
            ds[index]['book_title'] = book.get_info().title
            ds[index]['book_cover_url'] = book.get_info().book_cover_url

            # Reformat result need for front-end
            # timeArray = time.strptime(finish_date, "%Y-%m-%d %H:%M:%S")
            date = datetime.datetime.fromtimestamp(int(finish_date) / 1000)
            target, finish_num, finish_flag = Collection.get_tag(
                user_id, date.year, date.month)
            ds[index]['tag'] = {
                'target': target,
                'finish_num': finish_num,
                'finish_flag': finish_flag
            }
            result.append(ds[index])
        return result
 def get_read_history_by_date(user_id, year, month):
     # set default start date
     start_date = str(year) + "-" + str(month) + "-01 00:00:00"
     # set default finish date
     if month is 12:
         finish_date = str(year) + "-" + str(1) + "-01 00:00:00"
     else:
         finish_date = str(year) + "-" + str(month + 1) + "-01 00:00:00"
     # date -> timestamp
     start_timestamp = int(
         time.mktime(time.strptime(start_date, "%Y-%m-%d %H:%M:%S"))) * 1000
     finish_timestamp = int(
         time.mktime(time.strptime(finish_date,
                                   "%Y-%m-%d %H:%M:%S"))) * 1000
     collection_id = Collection.get_readcollection_id(user_id)
     # SQL
     conn = connect_sys_db()
     query = "SELECT book_id FROM collects WHERE collection_id = \'{collection_id}\'".format(
         collection_id=collection_id)
     db_result = read_sql(sql=query, con=conn)
     json_str = db_result.to_json(orient='index')
     ds = json.loads(json_str)
     result = []
     for index in ds:
         finish_date = Collection.get_book_read_date(
             user_id, ds[index]['book_id'])
         # Compare finish time to make sure whether this book is finished in this month
         if start_timestamp <= finish_date < finish_timestamp:
             ds[index]['finish_time'] = finish_date
             book = Book(ds[index]['book_id'])
             ds[index]['book_title'] = book.get_info().title
             ds[index]['book_cover_url'] = book.get_info().book_cover_url
             result.append(ds[index])
     return result
 def recommend_by_author(author, number, book_id):
     df = Recommend.get_recommend_list()
     # Get total number of books written by this author
     available_num = df['authors'].value_counts()
     if available_num[author] == 1: return []
     # Sort the dataframe by authors and popular grade
     df = df.sort_values(by=['authors', 'popular'], ascending=False)
     counter = 0
     result = []
     for item in df.iterrows():
         if counter == number: break
         # Do not recommend current reference book
         if item[1]['authors'] == author and item[1]['id'] != book_id:
             book = Book(item[1]['id'])
             info = book.get_info()
             # Return information which need for front-end
             temp = {
                 'book_id': item[1]['id'],
                 'author': item[1]['authors'],
                 'categories': item[1]['categories'],
                 'popular': item[1]['popular'],
                 'title': info.title,
                 'book_cover_url': info.book_cover_url
             }
             result.append(temp)
             counter += 1
     return result
 def recommend_by_publishedDate(publishedDate, number, book_id):
     df = Recommend.get_recommend_list()
     # Format the published_date column in the dataframe
     df = df[df['published_date'].str.contains(publishedDate)]
     # Sort by popular grade
     df = df.sort_values(by=['popular'], ascending=False)
     counter = 0
     result = []
     for item in df.iterrows():
         if counter == number: break
         # Do not recommend the reference book
         if item[1]['id'] != book_id:
             book = Book(item[1]['id'])
             info = book.get_info()
             # Return information which need for front-end
             temp = {
                 'book_id': item[1]['id'],
                 'author': item[1]['authors'],
                 'categories': item[1]['categories'],
                 'popular': item[1]['popular'],
                 'title': info.title,
                 'book_cover_url': info.book_cover_url
             }
             result.append(temp)
             counter += 1
     return result
 def get_user_reviews(user_id):
     # SQL
     conn = connect_sys_db()
     query = "SELECT user_id, username, book_id, rating, review_content, review_time FROM review_rate WHERE user_id = \'{user_id}\' ORDER BY review_time DESC".format(
         user_id=user_id)
     db_result = read_sql(sql=query, con=conn)
     json_str = db_result.to_json(orient='index')
     ds = json.loads(json_str)
     result = []
     for index in ds:
         # Add book's title and cover to result list
         book = Book(ds[index]['book_id'])
         ds[index]['book_title'] = book.get_info().title
         ds[index]['book_cover_url'] = book.get_info().book_cover_url
         result.append(ds[index])
     return result
Пример #6
0
 def get(self, book_id):
     book = Book(book_id)
     detail = book.get_info()
     if detail is None:
         return {'message': 'Resource not found'}, 404
     else:
         avg_rating = Review.get_book_average_rating(book_id)
         review_preview = Review.get_book_review_from_to(book_id, 0, 2)
         num_rated = Review.get_book_num_rating(book_id)
         return {
             'book_id': int(detail.id),
             'title': detail.title,
             'authors': detail.authors,
             'publisher': detail.publisher,
             'published_date': detail.published_date,
             'description': detail.description,
             'ISBN13': int(detail.ISBN13),
             'categories': detail.categories,
             'google_rating': float(detail.google_rating),
             'google_ratings_count': int(detail.google_ratings_count),
             'book_cover_url': detail.book_cover_url,
             'language': detail.language,
             'avg_rating': avg_rating,
             'num_rated': num_rated,
             'review_preview': review_preview,
             'read_times': int(book.get_read_times())
         }, 200
 def get(self):
     args = book_parser.parse_args()
     book_id = args.get('book_id')
     book = Book(book_id)
     # Get reference book's published date
     published_date = book.get_info().published_date
     result = Recommend.recommend_by_publishedDate(published_date[0:3], 6, book_id)
     if not result:
         return {'message': 'There is no more book similar with this book, try another mode'}, 200
     return {'books': result}, 200
 def get(self):
     args = book_parser.parse_args()
     book_id = args.get('book_id')
     book = Book(book_id)
     # Get reference book's author
     author = book.get_info().authors
     result = Recommend.recommend_by_author(author, 6, book_id)
     if not result:
         return {'message': 'There is no more book similar with this book, try another mode'}, 200
     return {'books': result}, 200
 def get_recent_added_books(user_id):
     conn = connect_sys_db()
     query = "SELECT book_id, max(collect_time) as latest FROM collections \
     JOIN collects ON collections.id = collects.collection_id WHERE user_id = \'{user_id}\' \
     AND name != 'read' GROUP BY book_id ORDER BY latest DESC".format(
         user_id=user_id)
     db_result = read_sql(sql=query, con=conn)
     json_str = db_result.to_json(orient='index')
     ds = json.loads(json_str)
     result = []
     for index in ds:
         book = Book(ds[index]['book_id'])
         book_info = book.get_info()
         # Add book's title and cover_url to result
         ds[index]['title'] = book_info.title
         ds[index]['book_cover_url'] = book_info.book_cover_url
         result.append(ds[index])
     return result