MovieRecommender / Streamlit.py
NafeyS1's picture
Upload 2 files
c9b4d0d verified
import streamlit as st
import requests
import pandas as pd
import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
# TMDB API Key (Replace with your own key)
API_KEY = "424c11e3d494d1d1a05f4985c11eaec8"
BASE_URL = "https://api.themoviedb.org/3"
# Function to fetch movies from TMDB API
def fetch_movies():
url = f"{BASE_URL}/movie/popular?api_key={API_KEY}&language=en-US&page=1"
response = requests.get(url)
if response.status_code == 200:
return response.json().get("results", [])
return []
# Load movies
data = fetch_movies()
movies_df = pd.DataFrame(data)[["id", "title", "overview", "vote_average"]]
# NLP Processing
vectorizer = TfidfVectorizer(stop_words='english')
tfidf_matrix = vectorizer.fit_transform(movies_df["overview"].fillna(""))
cosine_sim = cosine_similarity(tfidf_matrix, tfidf_matrix)
# Recommendation function
def recommend_movies(movie_title, top_n=5):
idx = movies_df[movies_df['title'] == movie_title].index
if len(idx) == 0:
return []
idx = idx[0]
sim_scores = list(enumerate(cosine_sim[idx]))
sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True)
sim_scores = sim_scores[1:top_n+1]
movie_indices = [i[0] for i in sim_scores]
return movies_df.iloc[movie_indices][["title", "vote_average"]]
# Streamlit Web App
st.title("🎬 AI-Powered Movie Recommender")
st.write("Select a movie to get recommendations!")
selected_movie = st.selectbox("Choose a movie:", movies_df["title"].values)
if st.button("Get Recommendations"):
recommendations = recommend_movies(selected_movie)
if not recommendations.empty:
st.write("## Recommended Movies:")
for index, row in recommendations.iterrows():
st.write(f"**{row['title']}** - Rating: {row['vote_average']}")
else:
st.write("No recommendations found.")