Files
viewarr/_scratch/moviedb.py
2025-12-12 14:56:50 -05:00

89 lines
2.8 KiB
Python

import requests
# API Key provided by the user
API_KEY = "9311701ee4cc5d2a470e41e8be09f6d5"
POCKETBASE_URL = "http://localhost:9090"
COLLECTION_NAME = "genres"
def get_movie_genres():
"""
Fetches all available movie genres from TMDB API using requests.
Returns:
list: A list of dictionaries representing genres.
"""
url = f"https://api.themoviedb.org/3/genre/movie/list?api_key={API_KEY}&language=en-US"
try:
response = requests.get(url)
response.raise_for_status()
data = response.json()
return data.get("genres", [])
except requests.exceptions.RequestException as e:
print(f"Error fetching genres: {e}")
return []
def save_genres_to_pocketbase(genres):
"""
Stores genres in the PocketBase 'genres' collection.
Checks if a genre with the same name already exists before creating it.
Args:
genres (list): A list of dictionaries with 'id' and 'name'.
"""
base_url = f"{POCKETBASE_URL}/api/collections/{COLLECTION_NAME}/records"
print(f"Processing {len(genres)} genres for PocketBase at {base_url}...")
for genre in genres:
genre_name = genre["name"]
# Check if genre already exists
try:
# PocketBase filter syntax: name='GenreName'
# We use params to let requests handle URL encoding properly
check_response = requests.get(
base_url, params={"filter": f"name='{genre_name}'"}
)
check_response.raise_for_status()
existing_data = check_response.json()
# PocketBase list response structure has 'items' and 'totalItems'
if existing_data.get("totalItems", 0) > 0:
print(f"Skipped (already exists): {genre_name}")
continue
except requests.exceptions.RequestException as e:
print(f"Error checking existence for {genre_name}: {e}")
continue
# Create new record if it doesn't exist
payload = {"name": genre_name}
try:
response = requests.post(base_url, json=payload)
if response.status_code == 200:
print(f"Saved: {genre_name}")
else:
# Log failure details
print(
f"Failed to save {genre_name}: {response.status_code} - {response.text}"
)
except requests.exceptions.RequestException as e:
print(f"Error saving {genre_name}: {e}")
if __name__ == "__main__":
genres = get_movie_genres()
if genres:
print(f"Found {len(genres)} genres:")
for genre in genres:
print(f"ID: {genre['id']}, Name: {genre['name']}")
print("-" * 30)
save_genres_to_pocketbase(genres)
else:
print("No genres found or an error occurred.")