yusiff commited on
Commit
255dfce
·
verified ·
1 Parent(s): 31adc4c

Delete app4.py

Browse files
Files changed (1) hide show
  1. app4.py +0 -183
app4.py DELETED
@@ -1,183 +0,0 @@
1
- import os
2
- os.environ["STREAMLIT_RUNTIME_ENV"] = "headless"
3
- os.environ["XDG_CONFIG_HOME"] = "/tmp"
4
-
5
-
6
- import pickle
7
- import streamlit as st
8
- import requests
9
- from datetime import datetime
10
-
11
- # -------------------- General Settings --------------------
12
- st.set_page_config(page_title="🎬 Movie Recommender", page_icon="🎞️", layout="wide")
13
-
14
- st.markdown("""
15
- <style>
16
- .movie-title {
17
- text-align: center;
18
- font-weight: bold;
19
- font-size: 22px;
20
- }
21
- .footer {
22
- text-align: center;
23
- font-size: 12px;
24
- color: grey;
25
- margin-top: 50px;
26
- }
27
- </style>
28
- """, unsafe_allow_html=True)
29
-
30
- # -------------------- Load Data --------------------
31
- try:
32
- movies = pickle.load(open('save models/movie_list.pkl', 'rb'))
33
- similarity = pickle.load(open('save models/similarity.pkl', 'rb'))
34
- except FileNotFoundError:
35
- st.error("❌ Required data files (movie_list.pkl and similarity.pkl) not found.")
36
- st.stop()
37
-
38
- # -------------------- Helper Functions --------------------
39
- def fetch_poster(movie_id):
40
- try:
41
- url = f"https://api.themoviedb.org/3/movie/{movie_id}?api_key=8265bd1679663a7ea12ac168da84d2e8&language=en-US"
42
- response = requests.get(url)
43
- data = response.json()
44
- poster_path = data.get('poster_path')
45
- return f"https://image.tmdb.org/t/p/w500/{poster_path}" if poster_path else "https://via.placeholder.com/500x750?text=No+Image"
46
- except:
47
- return "https://via.placeholder.com/500x750?text=Error"
48
-
49
- def fetch_movie_details(movie_id):
50
- try:
51
- url = f"https://api.themoviedb.org/3/movie/{movie_id}?api_key=8265bd1679663a7ea12ac168da84d2e8&language=en-US"
52
- response = requests.get(url)
53
- data = response.json()
54
- overview = data.get('overview', 'No overview available.')
55
- rating = data.get('vote_average', 'No rating')
56
- release_date = data.get('release_date', 'No release date')
57
- genres = ', '.join([genre['name'] for genre in data.get('genres', [])])
58
- return overview, rating, release_date, genres
59
- except:
60
- return "No details available.", "No rating", "No release date", "No genres"
61
-
62
- def recommend(movie):
63
- if movie not in movies['title'].values:
64
- return [], [], []
65
- index = movies[movies['title'] == movie].index[0]
66
- distances = sorted(list(enumerate(similarity[index])), reverse=True, key=lambda x: x[1])
67
- recommended_names = []
68
- recommended_posters = []
69
- recommended_ids = []
70
- for i in distances[1:6]:
71
- movie_id = movies.iloc[i[0]].movie_id
72
- recommended_names.append(movies.iloc[i[0]].title)
73
- recommended_posters.append(fetch_poster(movie_id))
74
- recommended_ids.append(movie_id) # حفظ الـ movie_id لتفاصيل الفيلم
75
- return recommended_names, recommended_posters, recommended_ids
76
-
77
- # -------------------- Page 1: Welcome --------------------
78
- def page_1():
79
- st.markdown("<h1 style='text-align: center;'>🎬 Movie Recommender</h1>", unsafe_allow_html=True)
80
- st.markdown("<hr>", unsafe_allow_html=True)
81
-
82
- hour = datetime.now().hour
83
- greeting_time = "Good Morning ☀️" if hour < 12 else "Good Evening 🌙" if hour >= 18 else "Good Afternoon 🌤️"
84
- st.markdown(f"### {greeting_time}")
85
-
86
- user_name = st.text_input("👤 Enter your name:")
87
- if st.button("Continue to Movie Selection"):
88
- if user_name:
89
- st.session_state.name = user_name
90
- st.session_state.page = "select_movie"
91
- else:
92
- st.warning("Please enter your name first 😊")
93
-
94
- # -------------------- Page 2: All-In-One (Select, Rate, Recommend, Details) --------------------
95
- def page_2():
96
- st.markdown(f"### Hello, {st.session_state.name} 👋", unsafe_allow_html=True)
97
-
98
- movie_list = movies['title'].values
99
- selected_movie = st.selectbox("🎥 Select a Movie", movie_list)
100
-
101
- rating = st.slider("⭐ Your Rating", 1, 10, 1)
102
- st.write(f"✅ Your rating: {rating} stars")
103
-
104
- # تهيئة المتغيرات في الجلسة
105
- if "show_recommendations" not in st.session_state:
106
- st.session_state.show_recommendations = False
107
- if "show_details" not in st.session_state:
108
- st.session_state.show_details = {}
109
-
110
- # أزرار التبديل
111
- if st.button("🎯 Recommendations"):
112
- st.session_state.show_recommendations = not st.session_state.show_recommendations
113
-
114
- # عرض التوصيات إذا تم التفعيل
115
- if st.session_state.show_recommendations:
116
- with st.spinner("⏳ Fetching recommendations..."):
117
- names, posters, ids = recommend(selected_movie)
118
- if names:
119
- st.markdown(f"### ✅ Recommended Movies Similar to {selected_movie}:")
120
- cols = st.columns(5)
121
- for i in range(5):
122
- with cols[i]:
123
- details_key = f"details_{i}"
124
- if details_key not in st.session_state.show_details:
125
- st.session_state.show_details[details_key] = False
126
-
127
- if st.button(f"Show {names[i]} Details", key=details_key):
128
- st.session_state.show_details[details_key] = not st.session_state.show_details[details_key]
129
-
130
- if st.session_state.show_details.get(details_key, False):
131
- movie_id = ids[i]
132
- overview, vote_avg, release_date, genres = fetch_movie_details(movie_id)
133
- st.markdown(f"### 📖 Movie Details, {names[i]}:")
134
- st.markdown(f"**Overview**: {overview}")
135
- st.markdown(f"**Rating**: {vote_avg}/10")
136
- st.markdown(f"**Release Date**: {release_date}")
137
- st.markdown(f"**Genres**: {genres}")
138
-
139
- st.image(posters[i], use_container_width=True)
140
- st.markdown(f"<div class='movie-title'>{names[i]}</div>", unsafe_allow_html=True)
141
-
142
- else:
143
- st.warning("⚠️ No recommendations found.")
144
-
145
- # تهيئة حالة إظهار التفاصيل إن لم تكن موجودة
146
- if "show_selected_details" not in st.session_state:
147
- st.session_state.show_selected_details = False
148
-
149
- # زر التبديل بين عرض/إخفاء التفاصيل
150
- if st.button(f"📖 Show Details of {selected_movie}"):
151
- st.session_state.show_selected_details = not st.session_state.show_selected_details
152
-
153
- # عرض التفاصيل إذا كانت الحالة مفعّلة
154
- if st.session_state.show_selected_details:
155
- movie_id = movies[movies['title'] == selected_movie].movie_id.iloc[0]
156
- overview, vote_avg, release_date, genres = fetch_movie_details(movie_id)
157
- st.markdown(f"### 📖 Movie Details, {selected_movie}:")
158
- st.markdown(f"**Overview**: {overview}")
159
- st.markdown(f"**Rating**: {vote_avg}/10")
160
- st.markdown(f"**Release Date**: {release_date}")
161
- st.markdown(f"**Genres**: {genres}")
162
-
163
-
164
-
165
- if st.button("🔙 Back"):
166
- st.session_state.page = "welcome"
167
-
168
- # -------------------- Page Navigation --------------------
169
- if 'page' not in st.session_state:
170
- st.session_state.page = "welcome"
171
-
172
- if st.session_state.page == "welcome":
173
- page_1()
174
- elif st.session_state.page == "select_movie":
175
- page_2()
176
-
177
- # -------------------- Footer --------------------
178
- st.markdown("<hr>", unsafe_allow_html=True)
179
- st.markdown("<div class='footer'>© 2025 • by Youssef • Powered by TMDB API</div>", unsafe_allow_html=True)
180
-
181
-
182
-
183
-