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
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