import os import requests from typing import Optional GENIUS_API_KEY = os.getenv("GENIUS_API_KEY", "") GENIUS_BASE_URL = "https://api.genius.com" def fetch_lyrics(song_title: str, artist_name: str) -> Optional[str]: if not GENIUS_API_KEY: return None search_query = f"{song_title} {artist_name}" try: search_url = f"{GENIUS_BASE_URL}/search" headers = {"Authorization": f"Bearer {GENIUS_API_KEY}"} params = {"q": search_query} response = requests.get(search_url, headers=headers, params=params, timeout=10) if response.status_code != 200: return None data = response.json() hits = data.get("response", {}).get("hits", []) if not hits: return None # Get the best match best_hit = hits[0] song_id = best_hit.get("result", {}).get("id") if not song_id: return None # Fetch song details song_url = f"{GENIUS_BASE_URL}/songs/{song_id}" song_response = requests.get(song_url, headers=headers, timeout=10) if song_response.status_code != 200: return None song_data = song_response.json() lyrics = song_data.get("response", {}).get("lyrics", "") if lyrics and lyrics != "[Lyrics are not written yet]": return lyrics return None except (requests.RequestException, KeyError, IndexError): return None