import os import lyricsgenius from typing import Optional, Dict, Any class GeniusClient: def __init__(self): self.access_token = os.getenv("GENIUS_ACCESS_TOKEN") if self.access_token: self.genius = lyricsgenius.Genius(self.access_token, verbose=False, remove_section_headers=True) else: print("WARNING: GENIUS_ACCESS_TOKEN not found. Lyrics enrichment will be skipped.") self.genius = None def search_song(self, title: str, artist: str) -> Optional[Dict[str, Any]]: """ Searches for a song on Genius and returns metadata + lyrics. """ if not self.genius: return None try: # Clean up title (remove "Feat.", "Remastered", etc for better search match) clean_title = title.split(" - ")[0].split("(")[0].strip() song = self.genius.search_song(clean_title, artist) if song: return { "lyrics": song.lyrics, "image_url": song.song_art_image_url, "artist_image_url": song.primary_artist.image_url } except Exception as e: print(f"Genius Search Error for {title} by {artist}: {e}") return None