Spaces:
Sleeping
Sleeping
| from flask import Flask, render_template,request,flash | |
| import pickle,requests | |
| import joblib | |
| # 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')) | |
| #movies = joblib.load('ML_part/movie_list.pkl') | |
| 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) |