Spaces:
Sleeping
Sleeping
File size: 5,957 Bytes
131f396 0ba454c 8bba3ae 131f396 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
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
@app.route('/', methods=["GET","POST"])
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')
@app.route('/nest/<string:movie>', methods=["GET","POST"])
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')
@app.route('/nest', methods=["GET","POST"])
def test():
return render_template('home.html')
if __name__ == '__main__':
app.run(debug=True) |