game-advisor / source /APIs /rawg_api.py
merligus's picture
Upload folder using huggingface_hub
f906754 verified
Raw
History Blame Contribute Delete
2.38 kB
from dotenv import load_dotenv
import os
import requests
from APIs.api_types import RAWGType
from urllib.parse import quote_plus
class RAWG:
def __init__(self):
load_dotenv()
self.api_key = os.getenv("RAWG_API_KEY")
def search(self, game_name: str, max_n: int = 1) -> list[RAWGType]:
"""
Searches for games by name and retrieves details.
Returns a list of RAWGType objects.
"""
search_url = f"https://api.rawg.io/api/games?search={quote_plus(game_name)}&key={self.api_key}"
response = requests.get(search_url)
response.raise_for_status()
search_results = response.json().get("results", [])
if not search_results:
return []
# Get details for top max_n results
rawg_results = []
for game_summary in search_results[:max_n]:
game_id = game_summary.get("id")
details_url = f"https://api.rawg.io/api/games/{game_id}?key={self.api_key}"
details_response = requests.get(details_url)
details_response.raise_for_status()
game_data = details_response.json()
rawg_obj = RAWGType(
name=game_data.get("name"),
release=game_data.get("released"),
rawg_rating=float(game_data.get("rating")) / 5.0 if game_data.get("rating") else 0.0,
metacritic_rating=(float(game_data.get("metacritic")) / 100.0 if game_data.get("metacritic") else 0.0),
main_story=game_data.get("playtime"),
platforms=[p.get("platform", {}).get("name") for p in game_data.get("platforms", []) if p.get("platform") is not None],
genres=[g.get("name") for g in game_data.get("genres", [])],
keywords=[t.get("name") for t in game_data.get("tags", [])],
esrb_rating=(game_data.get("esrb_rating", {}).get("name") if game_data.get("esrb_rating") else ""),
developers=[d.get("name") for d in game_data.get("developers", [])],
publishers=[p.get("name") for p in game_data.get("publishers", [])],
description=game_data.get("description_raw"),
cover_url=[game_data.get("background_image")] if game_data.get("background_image") else [],
)
rawg_results.append(rawg_obj)
return rawg_results