yusiff commited on
Commit
2fed4d9
ยท
verified ยท
1 Parent(s): 12f4e94

Delete app4.py

Browse files
Files changed (1) hide show
  1. app4.py +0 -179
app4.py DELETED
@@ -1,179 +0,0 @@
1
- import tempfile
2
- import os
3
- import pickle
4
- import streamlit as st
5
- import requests
6
- from datetime import datetime
7
-
8
- st.set_page_config(page_title="๐ŸŽฌ Movie Recommender", page_icon="๐ŸŽž๏ธ", layout="wide")
9
-
10
- st.markdown("""
11
- <style>
12
- .movie-title {
13
- text-align: center;
14
- font-weight: bold;
15
- font-size: 22px;
16
- }
17
- .footer {
18
- text-align: center;
19
- font-size: 12px;
20
- color: grey;
21
- margin-top: 50px;
22
- }
23
- </style>
24
- """, unsafe_allow_html=True)
25
-
26
- # -------------------- Load Data --------------------
27
- try:
28
- movies = pickle.load(open('saved model/movie_list.pkl', 'rb'))
29
- similarity = pickle.load(open('saved model/similarity.pkl', 'rb'))
30
- except FileNotFoundError:
31
- st.error("โŒ Required data files (movie_list.pkl and similarity.pkl) not found.")
32
- st.stop()
33
-
34
- # -------------------- Helper Functions --------------------
35
- def fetch_poster(movie_id):
36
- try:
37
- url = f"https://api.themoviedb.org/3/movie/{movie_id}?api_key=8265bd1679663a7ea12ac168da84d2e8&language=en-US"
38
- response = requests.get(url)
39
- data = response.json()
40
- poster_path = data.get('poster_path')
41
- return f"https://image.tmdb.org/t/p/w500/{poster_path}" if poster_path else "https://via.placeholder.com/500x750?text=No+Image"
42
- except:
43
- return "https://via.placeholder.com/500x750?text=Error"
44
-
45
- def fetch_movie_details(movie_id):
46
- try:
47
- url = f"https://api.themoviedb.org/3/movie/{movie_id}?api_key=8265bd1679663a7ea12ac168da84d2e8&language=en-US"
48
- response = requests.get(url)
49
- data = response.json()
50
- overview = data.get('overview', 'No overview available.')
51
- rating = data.get('vote_average', 'No rating')
52
- release_date = data.get('release_date', 'No release date')
53
- genres = ', '.join([genre['name'] for genre in data.get('genres', [])])
54
- return overview, rating, release_date, genres
55
- except:
56
- return "No details available.", "No rating", "No release date", "No genres"
57
-
58
- def recommend(movie):
59
- if movie not in movies['title'].values:
60
- return [], [], []
61
- index = movies[movies['title'] == movie].index[0]
62
- distances = sorted(list(enumerate(similarity[index])), reverse=True, key=lambda x: x[1])
63
- recommended_names = []
64
- recommended_posters = []
65
- recommended_ids = []
66
- for i in distances[1:6]:
67
- movie_id = movies.iloc[i[0]].movie_id
68
- recommended_names.append(movies.iloc[i[0]].title)
69
- recommended_posters.append(fetch_poster(movie_id))
70
- recommended_ids.append(movie_id) # ุญูุธ ุงู„ู€ movie_id ู„ุชูุงุตูŠู„ ุงู„ููŠู„ู…
71
- return recommended_names, recommended_posters, recommended_ids
72
-
73
- # -------------------- Page 1: Welcome --------------------
74
- def page_1():
75
- st.markdown("<h1 style='text-align: center;'>๐ŸŽฌ Movie Recommender</h1>", unsafe_allow_html=True)
76
- st.markdown("<hr>", unsafe_allow_html=True)
77
-
78
- hour = datetime.now().hour
79
- greeting_time = "Good Morning โ˜€๏ธ" if hour < 12 else "Good Evening ๐ŸŒ™" if hour >= 18 else "Good Afternoon ๐ŸŒค๏ธ"
80
- st.markdown(f"### {greeting_time}")
81
-
82
- user_name = st.text_input("๐Ÿ‘ค Enter your name:")
83
- if st.button("Continue to Movie Selection"):
84
- if user_name:
85
- st.session_state.name = user_name
86
- st.session_state.page = "select_movie"
87
- else:
88
- st.warning("Please enter your name first ๐Ÿ˜Š")
89
-
90
- # -------------------- Page 2: All-In-One (Select, Rate, Recommend, Details) --------------------
91
- def page_2():
92
- st.markdown(f"### Hello, {st.session_state.name} ๐Ÿ‘‹", unsafe_allow_html=True)
93
-
94
- movie_list = movies['title'].values
95
- selected_movie = st.selectbox("๐ŸŽฅ Select a Movie", movie_list)
96
-
97
- rating = st.slider("โญ Your Rating", 1, 10, 1)
98
- st.write(f"โœ… Your rating: {rating} stars")
99
-
100
- # ุชู‡ูŠุฆุฉ ุงู„ู…ุชุบูŠุฑุงุช ููŠ ุงู„ุฌู„ุณุฉ
101
- if "show_recommendations" not in st.session_state:
102
- st.session_state.show_recommendations = False
103
- if "show_details" not in st.session_state:
104
- st.session_state.show_details = {}
105
-
106
- # ุฃุฒุฑุงุฑ ุงู„ุชุจุฏูŠู„
107
- if st.button("๐ŸŽฏ Recommendations"):
108
- st.session_state.show_recommendations = not st.session_state.show_recommendations
109
-
110
- # ุนุฑุถ ุงู„ุชูˆุตูŠุงุช ุฅุฐุง ุชู… ุงู„ุชูุนูŠู„
111
- if st.session_state.show_recommendations:
112
- with st.spinner("โณ Fetching recommendations..."):
113
- names, posters, ids = recommend(selected_movie)
114
- if names:
115
- st.markdown(f"### โœ… Recommended Movies Similar to {selected_movie}:")
116
- cols = st.columns(5)
117
- for i in range(5):
118
- with cols[i]:
119
- details_key = f"details_{i}"
120
- if details_key not in st.session_state.show_details:
121
- st.session_state.show_details[details_key] = False
122
-
123
- if st.button(f"Show {names[i]} Details", key=details_key):
124
- st.session_state.show_details[details_key] = not st.session_state.show_details[details_key]
125
-
126
- if st.session_state.show_details.get(details_key, False):
127
- movie_id = ids[i]
128
- overview, vote_avg, release_date, genres = fetch_movie_details(movie_id)
129
- st.markdown(f"### ๐Ÿ“– Movie Details, {names[i]}:")
130
- st.markdown(f"**Overview**: {overview}")
131
- st.markdown(f"**Rating**: {vote_avg}/10")
132
- st.markdown(f"**Release Date**: {release_date}")
133
- st.markdown(f"**Genres**: {genres}")
134
-
135
- st.image(posters[i], use_container_width=True)
136
- st.markdown(f"<div class='movie-title'>{names[i]}</div>", unsafe_allow_html=True)
137
-
138
- else:
139
- st.warning("โš ๏ธ No recommendations found.")
140
-
141
- # ุชู‡ูŠุฆุฉ ุญุงู„ุฉ ุฅุธู‡ุงุฑ ุงู„ุชูุงุตูŠู„ ุฅู† ู„ู… ุชูƒู† ู…ูˆุฌูˆุฏุฉ
142
- if "show_selected_details" not in st.session_state:
143
- st.session_state.show_selected_details = False
144
-
145
- # ุฒุฑ ุงู„ุชุจุฏูŠู„ ุจูŠู† ุนุฑุถ/ุฅุฎูุงุก ุงู„ุชูุงุตูŠู„
146
- if st.button(f"๐Ÿ“– Show Details of {selected_movie}"):
147
- st.session_state.show_selected_details = not st.session_state.show_selected_details
148
-
149
- # ุนุฑุถ ุงู„ุชูุงุตูŠู„ ุฅุฐุง ูƒุงู†ุช ุงู„ุญุงู„ุฉ ู…ูุนู‘ู„ุฉ
150
- if st.session_state.show_selected_details:
151
- movie_id = movies[movies['title'] == selected_movie].movie_id.iloc[0]
152
- overview, vote_avg, release_date, genres = fetch_movie_details(movie_id)
153
- st.markdown(f"### ๐Ÿ“– Movie Details, {selected_movie}:")
154
- st.markdown(f"**Overview**: {overview}")
155
- st.markdown(f"**Rating**: {vote_avg}/10")
156
- st.markdown(f"**Release Date**: {release_date}")
157
- st.markdown(f"**Genres**: {genres}")
158
-
159
-
160
-
161
- if st.button("๐Ÿ”™ Back"):
162
- st.session_state.page = "welcome"
163
-
164
- # -------------------- Page Navigation --------------------
165
- if 'page' not in st.session_state:
166
- st.session_state.page = "welcome"
167
-
168
- if st.session_state.page == "welcome":
169
- page_1()
170
- elif st.session_state.page == "select_movie":
171
- page_2()
172
-
173
- # -------------------- Footer --------------------
174
- st.markdown("<hr>", unsafe_allow_html=True)
175
- st.markdown("<div class='footer'>ยฉ 2025 โ€ข by Youssef โ€ข Powered by TMDB API</div>", unsafe_allow_html=True)
176
-
177
-
178
-
179
-