import gradio as gr import requests import numpy as np import pandas as pd from PIL import Image # api_key = "a4ed408" _ added to get_poster and get_data Function! # A function that takes a movie name and returns its poster image as a numpy array def get_poster(movie): api_key = "a4ed408" base_url = "http://www.omdbapi.com/" params = {"apikey": api_key , "t": movie} response = requests.get(base_url, params=params) data = response.json() if data['Response'] == 'True': # Check if the response is successful # Open the image from the url poster_image = Image.open(requests.get(data['Poster'], stream=True).raw) # Convert the image to a numpy array poster_array = np.array(poster_image) return poster_array else: return np.zeros((500, 500, 3)) # A function that takes a movie name and returns its meta data def get_data(movie): api_key = "4e45e5b0" base_url = "http://www.omdbapi.com/" params = {"apikey": api_key , "t": movie} response = requests.get(base_url, params=params) data = response.json() if data['Response'] == 'True': # Check if the response is successful status = data['Response'] poster = data["Poster"] if not isinstance(poster, str): poster = "https://t2.gstatic.com/licensed-image?q=tbn:ANd9GcRav8An8wQSdccA_9fjnx0W_SH3xunzQXaitfpWmZpUKiLfKpMNRY_kZf5-6EQk2ZSi" title = data["Title"] year = data["Year"] director = data["Director"] cast = data["Actors"] genres = data["Genre"] rating = data["imdbRating"] # Return a dictionary with the information return { "status": status, "poster": poster, "title": title, "director": director, "cast": cast, "genres": genres, "rating": rating, "year" : year } # Recommendation Function from core import output_list def get_recommendations(input_list): movie_names = output_list(input_list) #movies_data = [get_data(movie) for movie in movie_names] movie_posters = [get_poster(movie) for movie in movie_names] return movie_names, movie_posters # HTML table def generate_table(movies, posters): html_code = "" # Add the table tag and style attributes html_code += "" for i in range(len(movies)): movie_name = movies[i] poster_array = posters[i] movie_data = get_data(movie_name) # Extract the information from the dictionary poster_url = movie_data["poster"] title = f"{movie_data['title']} ({movie_data['year']})" director = movie_data["director"] cast = movie_data["cast"] genres = movie_data["genres"] rating = movie_data["rating"] # Add a table row tag for each movie html_code += "" # Add a table cell tag with the poster image as an img tag html_code += f"" # Add a table cell tag with the movie information as a paragraph tag html_code += f"" # Close the table row tag html_code += "" # Close the table tag html_code += "

Title: {title}

Director: {director}

Cast: {cast}

Genres: {genres}

Rating: {rating}

" return html_code # Display Function user_input = {} def display_movie(movie, rating): global user_input data = get_data(movie) if data['status'] == 'True': user_input[f"{data['title']} ({data['year']})"] = rating poster = get_poster(data['title']) if len(user_input) == 5: # Get the recommended movies from the input r_movies, r_posters = get_recommendations(user_input) # Create a list with a list of HTML strings with information html_code = generate_table(r_movies, r_posters) user_input = {} # Return the output return f"Your movies are ready!\nPlease check the recommendations below.", np.zeros((500, 500, 3)), html_code elif data['status'] == 'True': # Return the input movie name and poster return f"You entered {movie} with rating {rating}", poster, "" else: return f"we can't find {movie} please try again", np.zeros((500, 500, 3)), "" # Interface iface = gr.Interface( fn= display_movie, inputs= [gr.Textbox(label="Enter a movie name (five movie in total!)"), gr.Slider(minimum=0, maximum=5, step=1, label="Rate the movie")], outputs= [gr.Textbox(label="Output", min_width=200), gr.components.Image(label="Poster", height=400, width=300), gr.components.HTML(label="Recommendations")], live= False, #examples=[["The Matrix"], ["The Lion King"], ["Titanic"], ['Fight Club'], ["Inception"], ["Pulp Fiction"], ["Forrest Gump"], ["Schindler’s List"]], title = "Movie Recommender" ) iface.launch()