89 lines
2.8 KiB
Python
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.")
|