From 5b5b67d42ab4c245104a449494fc03737df92e73 Mon Sep 17 00:00:00 2001 From: Colin Powell Date: Tue, 14 Mar 2023 18:44:28 -0400 Subject: [PATCH] Add genre fetching from IGDB --- vrobbler/apps/videogames/igdb.py | 7 ++++++- vrobbler/apps/videogames/utils.py | 4 ++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/vrobbler/apps/videogames/igdb.py b/vrobbler/apps/videogames/igdb.py index 43a4ad7..8653f25 100644 --- a/vrobbler/apps/videogames/igdb.py +++ b/vrobbler/apps/videogames/igdb.py @@ -62,7 +62,7 @@ def lookup_game_from_igdb(igdb_id: str) -> Dict: "Authorization": f"Bearer {get_igdb_token()}", "Client-ID": IGDB_CLIENT_ID, } - fields = "id,name,alternative_names.*,release_dates.*,cover.*,screenshots.*,rating,rating_count,summary" + fields = "id,name,alternative_names.*,genres.*,release_dates.*,cover.*,screenshots.*,rating,rating_count,summary" game_dict = {} body = f"fields {fields}; where id = {igdb_id};" @@ -94,6 +94,10 @@ def lookup_game_from_igdb(igdb_id: str) -> Dict: release_date = datetime.utcfromtimestamp(release_date).replace( tzinfo=pytz.utc ) + genres = [] + if "genres" in game.keys(): + for genre in game.get("genres"): + genres.append(genre["name"]) game_dict = { "igdb_id": game.get("id"), @@ -105,6 +109,7 @@ def lookup_game_from_igdb(igdb_id: str) -> Dict: "rating_count": game.get("rating_count"), "release_date": release_date, "summary": game.get("summary"), + "genres": genres, } return game_dict diff --git a/vrobbler/apps/videogames/utils.py b/vrobbler/apps/videogames/utils.py index b6deb68..8340c83 100644 --- a/vrobbler/apps/videogames/utils.py +++ b/vrobbler/apps/videogames/utils.py @@ -72,16 +72,20 @@ def load_game_data_from_igdb( logger.info(f"Looking up video game {igdb_id}") game_dict = lookup_game_from_igdb(igdb_id) + if not game_dict: logger.warn(f"No game data found on IGDB for ID {igdb_id}") return screenshot_url = game_dict.pop("screenshot_url") cover_url = game_dict.pop("cover_url") + genres = game_dict.pop("genres") VideoGame.objects.filter(pk=game.id).update(**game_dict) game.refresh_from_db() + game.genre.add(*genres) + if not game.screenshot: r = requests.get(screenshot_url) if r.status_code == 200: