CrimsonREwind commited on
Commit
ffbe32a
·
verified ·
1 Parent(s): 6d5280a

Delete main.py

Browse files
Files changed (1) hide show
  1. main.py +0 -110
main.py DELETED
@@ -1,110 +0,0 @@
1
- from flask import Flask, render_template, request, redirect, url_for, session, flash
2
- import pandas as pd
3
- import joblib
4
- from fuzzywuzzy import process
5
- from functools import wraps
6
- import os
7
- from supabase import create_client, Client
8
- from dotenv import load_dotenv
9
-
10
-
11
- load_dotenv()
12
-
13
- app = Flask(__name__)
14
- app.config['SECRET_KEY'] = os.getenv("SECRET_KEY")
15
-
16
- movies = pd.read_csv('core/data/processed_movies_with_posters.csv')
17
- cosine_sim = joblib.load('core/model/cosine_sim.pkl')
18
-
19
-
20
-
21
-
22
- @app.route('/logout')
23
- def logout():
24
- session.clear()
25
- flash('You have been logged out.', 'info')
26
- return redirect(url_for('login'))
27
-
28
-
29
- def get_recommendations(title, cosine_sim=cosine_sim):
30
- title = title.lower()
31
- if title not in movies['title'].str.lower().values:
32
- close_matches = process.extract(title, movies['title'].str.lower().values, limit=5)
33
- return None, [movies[movies['title'].str.lower() == match[0]].iloc[0] for match in close_matches]
34
- idx = movies[movies['title'].str.lower() == title].index[0]
35
- sim_scores = list(enumerate(cosine_sim[idx]))
36
- sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True)
37
- sim_scores = sim_scores[1:11]
38
- movie_indices = [i[0] for i in sim_scores]
39
- return movies.iloc[movie_indices], None
40
-
41
- def get_recommendations_by_id(movie_id, cosine_sim=cosine_sim):
42
- idx = movies[movies['id'] == movie_id].index[0]
43
- sim_scores = list(enumerate(cosine_sim[idx]))
44
- sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True)
45
- sim_scores = sim_scores[1:6]
46
- movie_indices = [i[0] for i in sim_scores]
47
- return movies.iloc[movie_indices]
48
-
49
- @app.route('/')
50
- def home():
51
- return render_template('recommendation.html', movies=movies.sample(20).to_dict(orient='records'))
52
-
53
-
54
- @app.route('/movie/<int:id>')
55
- def movie_details(id):
56
- movie = movies[movies['id'] == id].iloc[0]
57
- recommendations = get_recommendations_by_id(id).to_dict(orient='records')
58
- return render_template('movie_details.html')
59
-
60
- @app.route('/recommend', methods=['POST'])
61
- def recommend():
62
- title = request.form['title']
63
- recommendations, close_matches = get_recommendations(title)
64
- if recommendations is None:
65
- flash("Movie title not found. Did you mean one of these?", 'warning')
66
- return render_template('recommendation.html', movies=[match.to_dict() for match in close_matches])
67
- return render_template('recommendation.html', movies=recommendations.to_dict(orient='records'))
68
-
69
- @app.route('/search', methods=['GET', 'POST'])
70
- def search():
71
- if request.method == 'POST':
72
- query = request.form['query']
73
- results = movies[movies['title'].str.contains(query, case=False, na=False)]
74
- return render_template('search.html', movies=results.to_dict(orient='records'))
75
- return render_template('search.html', movies=None)
76
-
77
- @app.route('/filter', methods=['GET', 'POST'])
78
- def filter():
79
- genres = sorted(movies['genre'].str.split(',', expand=True).stack().dropna().unique())
80
- languages = sorted(movies['original_language'].dropna().unique())
81
-
82
- if request.method == 'POST':
83
- selected_genre = request.form.get('genre')
84
- selected_language = request.form.get('language')
85
-
86
- if not selected_genre and not selected_language:
87
- return render_template('filter.html', movies=None, genres=genres, languages=languages,
88
- error_message="No movies found. Please adjust your filters.")
89
-
90
- filtered_movies = movies.copy()
91
-
92
- if selected_genre:
93
- filtered_movies = filtered_movies[filtered_movies['genre'].str.contains(selected_genre, na=False)]
94
-
95
- if selected_language:
96
- filtered_movies = filtered_movies[filtered_movies['original_language'] == selected_language]
97
-
98
- filtered_movies['genre'] = filtered_movies['genre'].fillna('').astype(str)
99
-
100
- sample_size = min(50, len(filtered_movies))
101
-
102
- filtered_movies = filtered_movies.sample(sample_size).to_dict(orient='records')
103
-
104
- return render_template('filter.html', movies=filtered_movies, genres=genres, languages=languages,
105
- error_message=None)
106
-
107
- return render_template('filter.html', movies=None, genres=genres, languages=languages, error_message=None)
108
-
109
- if __name__ == '__main__':
110
- app.run(host='0.0.0.0', port=7860)