Divyansh Kushwaha
UPdated
7308f1a
from flask import Flask, render_template, request, jsonify
import pickle
import pandas as pd
import requests
app = Flask(__name__)
# Load the movie data and similarity matrix
movies_dict = pickle.load(open('movie_dict.pkl', 'rb'))
movies = pd.DataFrame(movies_dict)
similarity = pickle.load(open('similarity.pkl', 'rb'))
def fetch_poster(movie_id):
"""Fetch the movie poster using TMDB API."""
url = f"https://api.themoviedb.org/3/movie/{movie_id}?api_key=8265bd1679663a7ea12ac168da84d2e8&language=en-US"
data = requests.get(url).json()
poster_path = data.get('poster_path')
if poster_path:
return f"https://image.tmdb.org/t/p/w500/{poster_path}"
return "https://via.placeholder.com/500x750?text=No+Poster+Available"
def recommend(movie):
"""Recommend movies based on the selected movie."""
try:
index = movies[movies['title'] == 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]].movie_id
recommended_movie_posters.append(fetch_poster(movie_id))
recommended_movie_names.append(movies.iloc[i[0]].title)
return recommended_movie_names, recommended_movie_posters
except IndexError:
return [], []
@app.route('/')
def index():
"""Render the homepage with the list of movies."""
# Sort movies alphabetically
sorted_movies = sorted(list(movies['title'].values))
return render_template('index.html', movies=sorted_movies)
@app.route('/recommend', methods=['POST'])
def get_recommendations():
"""Handle the recommendation request."""
movie_name = request.form['movie_name']
recommended_names, recommended_posters = recommend(movie_name)
return jsonify({'names': recommended_names, 'posters': recommended_posters})
if __name__ == '__main__':
app.run(host="0.0.0.0", port=5000)