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.")