Add api dependencies
This commit is contained in:
@@ -4,6 +4,7 @@ import os
|
||||
import zipfile
|
||||
|
||||
import requests
|
||||
import uuid
|
||||
from flask import Blueprint, jsonify, request, session, send_file
|
||||
from werkzeug.utils import secure_filename
|
||||
from src.services.tmdb_service import TMDBService
|
||||
@@ -25,9 +26,7 @@ user_csvs = {}
|
||||
def get_poster_url(movie_name, movie_year):
|
||||
movie = tmdb_service.search_movie(movie_name, movie_year)
|
||||
if movie:
|
||||
posters = tmdb_service.get_movie_posters(movie['id'])
|
||||
if posters:
|
||||
return posters[0]
|
||||
return movie['poster_path']
|
||||
return None
|
||||
|
||||
|
||||
@@ -106,6 +105,10 @@ def allowed_file(filename):
|
||||
def upload_csv():
|
||||
user_id = session.get('user_id')
|
||||
|
||||
if not user_id:
|
||||
user_id = str(uuid.uuid4())
|
||||
session['user_id'] = user_id
|
||||
|
||||
if 'file' not in request.files:
|
||||
return jsonify({'error': 'No file part'}), 400
|
||||
file = request.files['file']
|
||||
@@ -160,17 +163,74 @@ def delete_csv():
|
||||
return jsonify({'error': 'An error occurred while deleting the CSV file'}), 500
|
||||
|
||||
|
||||
@api_bp.route('/fetch-diary', methods=['POST'])
|
||||
def fetch_diary_from_username():
|
||||
"""
|
||||
Récupère le diary via l'API publique (api.hugo-pierret.be), transforme en CSV et
|
||||
le stocke dans user_csvs[user_id] pour que le front continue à utiliser le même flux que l'upload.
|
||||
"""
|
||||
try:
|
||||
data = request.get_json() or {}
|
||||
username = data.get('username')
|
||||
if not username:
|
||||
return jsonify({'error': 'username required'}), 400
|
||||
|
||||
user_id = session.get('user_id')
|
||||
if not user_id:
|
||||
user_id = str(uuid.uuid4())
|
||||
session['user_id'] = user_id
|
||||
|
||||
api_url = f"https://api.hugo-pierret.be/letterboxd/diary?username={username}"
|
||||
resp = requests.get(api_url)
|
||||
if resp.status_code != 200:
|
||||
return jsonify({'error': 'Failed to fetch diary from upstream API'}), 502
|
||||
|
||||
payload = resp.json()
|
||||
entries = payload.get('entries', [])
|
||||
if not entries:
|
||||
return jsonify({'error': 'No entries returned by upstream API'}), 404
|
||||
|
||||
rows = []
|
||||
import re
|
||||
for e in entries:
|
||||
title = e.get('title') or ""
|
||||
date = e.get('date') or ""
|
||||
|
||||
m = re.match(r"^(?P<name>.+?)\s*\((?P<year>\d{4})\)\s*$", title)
|
||||
if m:
|
||||
name = m.group('name').strip()
|
||||
year = m.group('year')
|
||||
else:
|
||||
year_match = re.search(r"(\d{4})", title)
|
||||
year = year_match.group(1) if year_match else ""
|
||||
name = re.sub(r"\(\d{4}\)", "", title).strip()
|
||||
|
||||
rows.append({
|
||||
"Watched Date": date,
|
||||
"Name": name,
|
||||
"Year": year
|
||||
})
|
||||
|
||||
import pandas as pd, io
|
||||
rows.reverse()
|
||||
df = pd.DataFrame(rows)
|
||||
csv_str = df.to_csv(index=False)
|
||||
|
||||
user_csvs[user_id] = csv_str
|
||||
|
||||
return jsonify({'success': True, 'message': 'Diary fetched and stored', 'total': len(rows)}), 200
|
||||
|
||||
except Exception as e:
|
||||
print("Error in fetch_diary_from_username:", str(e))
|
||||
return jsonify({'error': 'An internal error occurred'}), 500
|
||||
|
||||
|
||||
@api_bp.route('/download-posters', methods=['POST'])
|
||||
def download_posters():
|
||||
try:
|
||||
data = request.get_json()
|
||||
selected_posters = data.get('posters', [])
|
||||
|
||||
<<<<<<< HEAD
|
||||
print(data)
|
||||
|
||||
=======
|
||||
>>>>>>> 496f9e8f62940d1f3544da6e72b74be07e18bd25
|
||||
|
||||
if not selected_posters:
|
||||
return jsonify({'error': 'No posters selected'}), 400
|
||||
|
||||
|
||||
Reference in New Issue
Block a user