2026-07-03 01:06:35 +00:00

52 lines
1.5 KiB
Python

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