Spaces:
Sleeping
Sleeping
| from flask import Flask, render_template, request | |
| import pandas as pd | |
| import requests | |
| app = Flask(__name__) | |
| # Load data | |
| movies = pd.read_pickle('movie_list.pkl') | |
| similarity = pd.read_pickle('similarity.pkl') | |
| def fetch_poster(movie_id): | |
| url = "https://api.themoviedb.org/3/movie/{}?api_key=8265bd1679663a7ea12ac168da84d2e8&language=en-US".format(movie_id) | |
| data = requests.get(url) | |
| data = data.json() | |
| poster_path = data['poster_path'] | |
| full_path = "https://image.tmdb.org/t/p/w500/" + poster_path | |
| return full_path | |
| def fetch_poster_tmdb(movie_id): | |
| url = "https://api.themoviedb.org/3/movie/{}/recommendations?api_key=8265bd1679663a7ea12ac168da84d2e8&language=en-US&page=1".format(movie_id[0]) | |
| data = requests.get(url) | |
| data = data.json() | |
| full_path = data['results'] | |
| return full_path | |
| def recommend(movie): | |
| index = movies[movies['title_x'] == movie].index[0] | |
| distances = sorted(list(enumerate(similarity[index])), reverse=True, key=lambda x: x[1]) | |
| recommended_movie_names = [] | |
| recommended_movie_posters = [] | |
| for i in distances[1:6]: | |
| movie_id = movies.iloc[i[0]].id | |
| recommended_movie_posters.append(fetch_poster(movie_id)) | |
| recommended_movie_names.append(movies.iloc[i[0]].title_x) | |
| return recommended_movie_names, recommended_movie_posters | |
| def recommend_tmdb(movie): | |
| recommended_movie_names = [] | |
| recommended_movie_posters = [] | |
| movie_id = movies[movies.title_x==movie].id.values | |
| data = fetch_poster_tmdb(movie_id) | |
| for i in range(5): | |
| recommended_movie_posters.append("https://image.tmdb.org/t/p/w500/"+data[i]['poster_path']) | |
| recommended_movie_names.append(data[i]['title']) | |
| return recommended_movie_names, recommended_movie_posters | |
| def index(): | |
| movie_list = movies['title_x'].values | |
| recommendations = None | |
| selected_movie = None | |
| if request.method == 'POST': | |
| selected_movie = request.form.get('movie') | |
| if selected_movie: | |
| try: | |
| my_names, my_posters = recommend(selected_movie) | |
| tmdb_names, tmdb_posters = recommend_tmdb(selected_movie) | |
| recommendations = { | |
| 'my_recommendation': list(zip(my_names, my_posters)), | |
| 'tmdb_recommendation': list(zip(tmdb_names, tmdb_posters)) | |
| } | |
| except Exception as e: | |
| print(f"Error getting recommendations: {e}") | |
| return render_template('index.html', | |
| movie_list=movie_list, | |
| recommendations=recommendations, | |
| selected_movie=selected_movie) | |
| if __name__ == '__main__': | |
| # Use port 7860 for Hugging Face Spaces compatibility | |
| app.run(host='0.0.0.0', port=7860, debug=False) | |