-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.py
70 lines (61 loc) · 2.5 KB
/
app.py
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
# save this as app.py
from flask import Flask, request, render_template, request
import pickle
import requests
import pandas as pd
from patsy import dmatrices
#picking the dataset and currently in use in my website
movies = pickle.load(open('model/movies_list.pkl', 'rb'))
similarity = pickle.load(open('model/similarity.pkl', 'rb'))
#fetching the posters from api
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
##recommend the movie
def recommend(movie):
index = movies[movies['title'] == movie].index[0]
distances = sorted(list(enumerate(similarity[index])), reverse= True, key=lambda x: x[1])
recommended_movies_name = []
recommended_movies_poster = []
for i in distances[1:6]:
movie_id = movies.iloc[i[0]].movie_id
recommended_movies_poster.append(fetch_poster(movie_id))
recommended_movies_name.append(movies.iloc[i[0]].title)
return recommended_movies_name, recommended_movies_poster
#//flask server Making
app = Flask(__name__)
@app.route('/')
def home():
return render_template("index.html")
@app.route('/about')
def about():
return render_template("about.html")
@app.route('/contact')
def contact():
return render_template("contact.html")
@app.route('/recommendation', methods = ['GET', 'POST'])
def recommendation():
movie_list = movies['title'].values
status = False
if request.method == "POST":
try:
if request.form:
movies_name = request.form['movies']
print(movies_name)
recommended_movies_name, recommended_movies_poster = recommend(movies_name)
print(recommended_movies_name)
print(recommended_movies_poster)
status = True
return render_template("prediction.html", movies_name = recommended_movies_name, poster = recommended_movies_poster, movie_list = movie_list, status = status)
except Exception as e:
error = {'error': e}
return render_template("prediction.html",error = error, movie_list = movie_list, status = status)
else:
return render_template("prediction.html", movie_list = movie_list, status = status)
if __name__ == '__main__':
app.debug = True
app.run(host="0.0.0.0", port=5000)