# main code import streamlit as st import pickle import requests movies = pickle.load(open("movies_list.pkl", 'rb')) similarity = pickle.load(open("similarity.pkl",'rb')) movies_list = movies['title'].values st.header("Movie Recommender System") selectvalue = st.selectbox("Select movie from dropdown", movies_list) def fetch_poster(movie_id): try: url = "https://api.themoviedb.org/3/movie/{}?api_key=8cfe8dff1a6fff88fe27b573ee65c035&language=en-US".format(movie_id) # Disablinb SSL verification for development data = requests.get(url, verify=False) data = data.json() poster_path = data['poster_path'] if poster_path: full_path = "https://image.tmdb.org/t/p/w500/" + poster_path return full_path else: st.warning(f"No poster found for movie ID {movie_id}") return None except Exception as e: st.error(f"Error fetching poster: {str(e)}") return None def recommend(movie): index = movies[movies['title']==movie].index[0] distance = sorted(list(enumerate(similarity[index])), reverse=True, key=lambda vector:vector[1]) recommend_movie = [] recommend_poster = [] for i in distance[1:6]: movies_id = movies.iloc[i[0]].id recommend_movie.append(movies.iloc[i[0]].title) poster = fetch_poster(movies_id) recommend_poster.append(poster) return recommend_movie, recommend_poster if st.button("Show Recommend"): movie_name, movie_poster = recommend(selectvalue) cols = st.columns(5) for idx, (col, name, poster) in enumerate(zip(cols, movie_name, movie_poster)): with col: st.text(name) if poster: # showing image if url exists st.image(poster) else: st.write("No poster available")