Spaces:
Sleeping
Sleeping
from flask import Flask, render_template,request,flash | |
import pickle,requests | |
import joblib | |
# Provide template folder name | |
# The default folder name should be "templates" else need to mention custom folder name | |
app = Flask(__name__, template_folder='templates', | |
static_folder='static') | |
app.secret_key = "abc" | |
# movies = pickle.load(open('movie_l.pkl','rb')) | |
#similarity = joblib.load('movie_list.joblib') | |
movies = pickle.load(open('./movie_list.pkl','rb')) | |
similarity = pickle.load(open('./similarity.pkl','rb')) | |
mv = pickle.load(open('./castcrew.pkl','rb')) | |
def getcast(movie_id): | |
movie_row = mv[mv['movie_id'] == movie_id] | |
# extract the cast and crew information from the row | |
cast = (movie_row['cast'].values[0]) | |
listToStr = ' '.join([str(elem) + ',' for i,elem in enumerate(cast)]) | |
print(cast) | |
crew = str(movie_row['crew'].values[0]) | |
crew.replace("'", "") | |
return (listToStr[:-1],crew[2:-2]) | |
def getm(movie): | |
index = movies[movies['title'] == movie].index[0] | |
movie_i = movies.iloc[index].movie_id | |
url = "https://api.themoviedb.org/3/movie/{}?api_key=8265bd1679663a7ea12ac168da84d2e8&language=en-US".format(movie_i) | |
data = requests.get(url) | |
data = data.json() | |
company_names = [company['name'] for company in data['production_companies']] | |
return (data['release_date'].split("-")[0],company_names) | |
def rating(movie): | |
index = movies[movies['title'] == movie].index[0] | |
movie_i = movies.iloc[index].movie_id | |
url = "https://api.themoviedb.org/3/movie/{}?api_key=8265bd1679663a7ea12ac168da84d2e8&language=en-US".format(movie_i) | |
data = requests.get(url) | |
data = data.json() | |
genres = [genre['name'] for genre in data['genres']] | |
return (round(float(data['vote_average']), 2),data['release_date'],genres,data['homepage']) | |
def detail(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() | |
genres = [genre['name'] for genre in data['genres']] | |
vote = round(float(data['vote_average']), 2) | |
return (data['overview'],data['homepage'],', '.join(genres),data['runtime'],vote) | |
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 | |
# function to return movie names and poster of top five similar movies got through model we built | |
def recommend(movie): | |
index = movies[movies['title'] == movie].index[0] | |
movie_i = movies.iloc[index].movie_id | |
mp=fetch_poster(movie_i) | |
overview,homepage,genres,rev,vote=detail(movie_i) | |
cast,crew = getcast(movie_i) | |
distances = sorted(list(enumerate(similarity[index])), reverse=True, key=lambda x: x[1]) | |
recommended_movie_names = [] | |
recommended_movie_posters = [] | |
for i in distances[1:8]: | |
# fetch the movie poster | |
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,overview,homepage,genres,rev,vote,mp,cast,crew | |
def index(): | |
if request.method == "POST": | |
try: | |
movie = request.form.get("search") | |
if(len(movie) < 1): | |
return render_template('movie.html') | |
recommended_movie_names,recommended_movie_posters,overview,homepage,genres,rev,vote,mp,cast,crew = recommend(movie) | |
raj= getm(movie) | |
ratings= [rating(movie) for movie in recommended_movie_names] | |
return render_template('movie.html',names=recommended_movie_names,posters=recommended_movie_posters,over=overview,homep=homepage,gen=genres,cur_m=movie,rev=rev,vote=vote,rating=ratings,mp=mp,raj=raj,cast=cast,crew=crew) | |
except: | |
flash("Movie not available") | |
return render_template('home.html') | |
flash("Movie not available") | |
return render_template('home.html') | |
def nest(movie): | |
if request.method == "POST": | |
try: | |
movie1 = request.form.get("search") | |
if movie1: | |
if(len(movie) < 1): | |
return render_template('home.html') | |
recommended_movie_names,recommended_movie_posters,overview,homepage,genres,rev,vote,mp,cast,crew = recommend(movie) | |
raj= getm(movie) | |
ratings= [rating(movie) for movie in recommended_movie_names] | |
return render_template('movie.html',names=recommended_movie_names,posters=recommended_movie_posters,over=overview,homep=homepage,gen=genres,cur_m=movie,rev=rev,vote=vote,rating=ratings,mp=mp,raj=raj,cast=cast,crew=crew) | |
else: | |
if not movie: | |
return render_template('home.html') | |
recommended_movie_names, recommended_movie_posters, overview, homepage, genres, rev, vote, mp,cast,crew = recommend(movie) | |
raj= getm(movie) | |
ratings = [rating(movie) for movie in recommended_movie_names] | |
return render_template('movie.html', names=recommended_movie_names, posters=recommended_movie_posters, | |
over=overview, homep=homepage, gen=genres, cur_m=movie, rev=rev, vote=vote, | |
rating=ratings, mp=mp,raj=raj, cast=cast, crew=crew) | |
except: | |
flash("Movie not available") | |
return render_template('home.html') | |
def test(): | |
return render_template('home.html') | |
if __name__ == '__main__': | |
app.run(debug=True) |