fix download poster

This commit is contained in:
Pierret Hugo
2024-12-22 00:27:31 +01:00
parent b633cd11c3
commit 496f9e8f62

View File

@@ -20,6 +20,7 @@ ALLOWED_EXTENSIONS = {'csv'}
user_csvs = {} user_csvs = {}
@lru_cache(maxsize=1000) @lru_cache(maxsize=1000)
def get_poster_url(movie_name, movie_year): def get_poster_url(movie_name, movie_year):
movie = tmdb_service.search_movie(movie_name, movie_year) movie = tmdb_service.search_movie(movie_name, movie_year)
@@ -29,23 +30,24 @@ def get_poster_url(movie_name, movie_year):
return posters[0] return posters[0]
return None return None
@api_bp.route('/movies', methods=['GET']) @api_bp.route('/movies', methods=['GET'])
def get_movies(): def get_movies():
user_id = session.get('user_id') # Récupérer l'ID de l'utilisateur de la session user_id = session.get('user_id') # Récupérer l'ID de l'utilisateur de la session
if user_id not in user_csvs: if user_id not in user_csvs:
return jsonify({'movies': [], 'message': 'No movies found. Please upload a CSV file.'}), 200 return jsonify({'movies': [], 'message': 'No movies found. Please upload a CSV file.'}), 200
# Lire le DataFrame à partir du cache # Lire le DataFrame à partir du cache
csv_content = user_csvs[user_id] csv_content = user_csvs[user_id]
try: try:
# Si csv_content est une chaîne, il n'est pas nécessaire de décoder # Si csv_content est une chaîne, il n'est pas nécessaire de décoder
if isinstance(csv_content, bytes): if isinstance(csv_content, bytes):
df = pd.read_csv(io.StringIO(csv_content.decode('utf-8'))) df = pd.read_csv(io.StringIO(csv_content.decode('utf-8')))
else: else:
df = pd.read_csv(io.StringIO(csv_content)) df = pd.read_csv(io.StringIO(csv_content))
# Reste de votre code pour la pagination et le traitement... # Reste de votre code pour la pagination et le traitement...
page = int(request.args.get('page', 1)) page = int(request.args.get('page', 1))
limit = int(request.args.get('limit', 10)) limit = int(request.args.get('limit', 10))
@@ -66,12 +68,12 @@ def get_movies():
'id': start_index + i + 1, 'id': start_index + i + 1,
'Watched Date': movie['Watched Date'], 'Watched Date': movie['Watched Date'],
'Name': movie['Name'], 'Name': movie['Name'],
'Year': movie['Year'], 'Year': movie['Year'],
'Poster': get_poster_url(movie['Name'], movie['Year']), 'Poster': get_poster_url(movie['Name'], movie['Year']),
} }
for i, movie in enumerate(movies) for i, movie in enumerate(movies)
] ]
return jsonify({ return jsonify({
'movies': movies_with_posters, 'movies': movies_with_posters,
'total': total_movies, 'total': total_movies,
@@ -81,27 +83,29 @@ def get_movies():
except Exception as e: except Exception as e:
print(f"Error in get_movies: {str(e)}") print(f"Error in get_movies: {str(e)}")
return jsonify({'error': 'An error occurred while fetching movies'}), 500 return jsonify({'error': 'An error occurred while fetching movies'}), 500
@api_bp.route('/posters/<movie_name>/<movie_year>', methods=['GET']) @api_bp.route('/posters/<movie_name>/<movie_year>', methods=['GET'])
def get_movie_posters(movie_name, movie_year): def get_movie_posters(movie_name, movie_year):
tmdb_service = TMDBService() tmdb_service = TMDBService()
movie = tmdb_service.search_movie(movie_name, movie_year) movie = tmdb_service.search_movie(movie_name, movie_year)
if movie: if movie:
posters = tmdb_service.get_movie_posters(movie['id']) posters = tmdb_service.get_movie_posters(movie['id'])
return jsonify({'posters': posters}) return jsonify({'posters': posters})
else: else:
return jsonify({'error': 'Movie not found'}), 404 return jsonify({'error': 'Movie not found'}), 404
def allowed_file(filename): def allowed_file(filename):
return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
@api_bp.route('/upload-csv', methods=['POST']) @api_bp.route('/upload-csv', methods=['POST'])
def upload_csv(): def upload_csv():
user_id = session.get('user_id') user_id = session.get('user_id')
if 'file' not in request.files: if 'file' not in request.files:
return jsonify({'error': 'No file part'}), 400 return jsonify({'error': 'No file part'}), 400
file = request.files['file'] file = request.files['file']
@@ -110,7 +114,7 @@ def upload_csv():
if file and allowed_file(file.filename): if file and allowed_file(file.filename):
content = file.read() content = file.read()
user_csvs[user_id] = content user_csvs[user_id] = content
try: try:
df = pd.read_csv(io.StringIO(content.decode('utf-8'))) df = pd.read_csv(io.StringIO(content.decode('utf-8')))
df = df.rename(columns={ df = df.rename(columns={
@@ -118,18 +122,19 @@ def upload_csv():
'Name': 'Name', 'Name': 'Name',
'Year': 'Year' 'Year': 'Year'
}) })
user_csvs[user_id] = df.to_csv(index=False) user_csvs[user_id] = df.to_csv(index=False)
return jsonify({'success': True, 'message': 'File uploaded and processed successfully'}), 200 return jsonify({'success': True, 'message': 'File uploaded and processed successfully'}), 200
except Exception as e: except Exception as e:
return jsonify({'error': f'Error processing file: {str(e)}'}), 500 return jsonify({'error': f'Error processing file: {str(e)}'}), 500
return jsonify({'error': 'File type not allowed'}), 400 return jsonify({'error': 'File type not allowed'}), 400
@api_bp.route('/check-csv', methods=['GET']) @api_bp.route('/check-csv', methods=['GET'])
def check_csv(): def check_csv():
user_id = session.get('user_id') user_id = session.get('user_id')
try: try:
if user_id in user_csvs: if user_id in user_csvs:
return jsonify({'fileExists': True}), 200 return jsonify({'fileExists': True}), 200
@@ -139,10 +144,11 @@ def check_csv():
print(f"Error in check_csv: {str(e)}") print(f"Error in check_csv: {str(e)}")
return jsonify({'error': 'An error occurred while checking the CSV file'}), 500 return jsonify({'error': 'An error occurred while checking the CSV file'}), 500
@api_bp.route('/delete-csv', methods=['DELETE']) @api_bp.route('/delete-csv', methods=['DELETE'])
def delete_csv(): def delete_csv():
user_id = session.get('user_id') user_id = session.get('user_id')
try: try:
if user_id in user_csvs: if user_id in user_csvs:
del user_csvs[user_id] del user_csvs[user_id]
@@ -159,22 +165,25 @@ def download_posters():
try: try:
data = request.get_json() data = request.get_json()
selected_posters = data.get('posters', []) selected_posters = data.get('posters', [])
if not selected_posters: if not selected_posters:
return jsonify({'error': 'No posters selected'}), 400 return jsonify({'error': 'No posters selected'}), 400
zip_buffer = io.BytesIO() zip_buffer = io.BytesIO()
with zipfile.ZipFile(zip_buffer, 'w', zipfile.ZIP_DEFLATED) as zip_file: with zipfile.ZipFile(zip_buffer, 'w', zipfile.ZIP_DEFLATED) as zip_file:
# Télécharger chaque poster # Télécharger chaque poster
for poster in selected_posters: for poster in selected_posters:
movie_id = poster['movieId'] movie_id = poster['movieId']
poster_id = poster['posterId'] poster_id = poster['posterId']
poster_url = f"https://image.tmdb.org/t/p/w500{poster_id}" watched_date = poster.get('watchedDate', 'unknown-date')
poster_url = f"https://image.tmdb.org/t/p/original{poster_id}"
try: try:
response = requests.get(poster_url) response = requests.get(poster_url)
if response.status_code == 200: if response.status_code == 200:
zip_file.writestr(f"{movie_id}.jpg", response.content) file_name = f"{watched_date}_{movie_id}.jpg"
zip_file.writestr(file_name, response.content)
else: else:
print(f"Failed to download poster for movie ID {movie_id}") print(f"Failed to download poster for movie ID {movie_id}")
except Exception as e: except Exception as e: