MovieRecommender / database.py
Moiz
added poster links
65575bf
import requests
import pandas as pd
import os
from tqdm import tqdm # Import tqdm for progress bar
# Load CSV
try:
df = pd.read_csv('/Users/moizpro/Desktop/MoviesRecommender/MovieRecommender/imdb_movie_codes.csv')
print("df loaded..")
except FileNotFoundError:
print("Error: CSV file not found at path")
exit()
# Define column names for the DataFrame
column_names = [
"id", "Title", "Year", "Rated", "Runtime", "Genre1", "Genre2", "Genre3",
"Director", "Writer", "Plot", "Awards", "IMDb", "Rotten Tomatoes",
"Metascore", "IMDb_votes", "Type", "BoxOffice", "Poster" # Add Musab, Moiz, Udisha columns for personal rating if needed
]
database = pd.DataFrame(columns=column_names)
# Define function to fetch movie details and save in DataFrame
def get_movie(movie_id):
api_key = os.getenv("API_KEY")
url = f"http://www.omdbapi.com/?apikey={api_key}&i={movie_id}&plot=full"
try:
response = requests.get(url)
if response.status_code == 200:
data = response.json()
# Check for valid response
if data.get("Response") == "True":
# Extract genres
genres = (data.get("Genre") or "").split(", ")
genre1, genre2, genre3 = genres[:3] if len(genres) >= 3 else genres + [None] * (3 - len(genres))
# Append the movie data to the DataFrame
database.loc[len(database)] = [
movie_id,
data.get("Title"),
data.get("Year"),
data.get("Rated"),
data.get("Runtime"),
genre1, genre2, genre3,
data.get("Director"),
data.get("Writer"),
data.get("Plot"),
data.get("Awards"),
data.get("imdbRating"),
data.get("Ratings")[1]["Value"] if len(data.get("Ratings", [])) > 1 else None,
data.get("Metascore"),
data.get("imdbVotes"),
data.get("Type"),
data.get("BoxOffice"),
data.get("Poster"),
]
else:
print(f"Error in API response for movie_id {movie_id}: {data.get('Error')}")
else:
print(f"HTTP error {response.status_code} for movie_id {movie_id}")
except Exception as e:
print(f"Exception occurred for movie_id {movie_id}: {e}")
# Loop through movie IDs in the CSV and fetch details with a progress bar
for i in tqdm(range(len(df)), desc="Fetching movie details", unit="movie"):
movie_id = df.iloc[i, 0]
get_movie(movie_id)
# Save the DataFrame to a CSV file
output_file = '/Users/moizpro/Desktop/MoviesRecommender/MovieRecommender/MovieDatabase.csv'
database.to_csv(output_file, index=False)
print(f"Movie database saved to {output_file}")