NeelTA's picture
Application files
b098441
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
@app.route('/', methods=['GET', 'POST'])
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)