123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- import urllib
- import json
- import logging
- import requests
- from django.conf import settings
- THEAUDIODB_API_KEY = getattr(settings, "THEAUDIODB_API_KEY")
- ARTIST_SEARCH_URL = f"https://www.theaudiodb.com/api/v1/json/{THEAUDIODB_API_KEY}/search.php?s="
- ARTIST_FETCH_URL = f"https://www.theaudiodb.com/api/v1/json/{THEAUDIODB_API_KEY}/artist.php?i="
- ALBUM_SEARCH_URL = f"https://www.theaudiodb.com/api/v1/json/{THEAUDIODB_API_KEY}/searchalbum.php?s="
- logger = logging.getLogger(__name__)
- def lookup_artist_from_tadb(name_or_id: str) -> dict:
- artist_info = {}
- response = None
- # Look for an ID as an integer
- try:
- tadb_id = int(name_or_id)
- except ValueError:
- tadb_id = None
- if tadb_id:
- response = requests.get(ARTIST_FETCH_URL + str(tadb_id))
- if response.status_code != 200:
- logger.warn(f"Bad response from TADB: {response.status_code}")
- return artist_info
- if not response.content:
- logger.warn(f"Bad content from TADB: {response.content}")
- return artist_info
- if not response:
- name = urllib.parse.quote(name_or_id)
- response = requests.get(ARTIST_SEARCH_URL + name)
- if response.status_code != 200:
- logger.warn(f"Bad response from TADB: {response.status_code}")
- return artist_info
- if not response.content:
- logger.warn(f"Bad content from TADB: {response.content}")
- return artist_info
- if '{"artists": null}' in str(response.content):
- logger.warn(f"Bad content from TADB: {response.content}")
- return artist_info
- results = json.loads(response.content)
- if results["artists"]:
- artist = results["artists"][0]
- artist_info["biography"] = artist.get("strBiographyEN")
- artist_info["genre"] = artist.get("strGenre")
- artist_info["mood"] = artist.get("strMood")
- artist_info["thumb_url"] = artist.get("strArtistThumb")
- return artist_info
- def lookup_album_from_tadb(name: str, artist: str) -> dict:
- album_info = {}
- artist = urllib.parse.quote(artist)
- name = urllib.parse.quote(name)
- response = requests.get("".join([ALBUM_SEARCH_URL, artist, "&a=", name]))
- if response.status_code != 200:
- logger.warn(f"Bad response from TADB: {response.status_code}")
- return {}
- if not response.content:
- logger.warn(f"Bad content from TADB: {response.content}")
- return {}
- results = json.loads(response.content)
- if results["album"]:
- album = results["album"][0]
- album_info["theaudiodb_id"] = album.get("idAlbum")
- album_info["theaudiodb_description"] = album.get("strDescriptionEN")
- album_info["theaudiodb_genre"] = album.get("strGenre")
- album_info["theaudiodb_style"] = album.get("strStyle")
- album_info["theaudiodb_mood"] = album.get("strMood")
- album_info["theaudiodb_speed"] = album.get("strSpeed")
- album_info["theaudiodb_theme"] = album.get("strTheme")
- album_info["allmusic_id"] = album.get("strAllMusicID")
- album_info["wikipedia_slug"] = album.get("strWikipediaID")
- album_info["discogs_id"] = album.get("strDiscogsID")
- album_info["wikidata_id"] = album.get("strWikidataID")
- album_info["rateyourmusic_id"] = album.get("strRateYourMusicID")
- if album.get("intYearReleased"):
- album_info["theaudiodb_year_released"] = float(
- album.get("intYearReleased")
- )
- if album.get("intScore"):
- album_info["theaudiodb_score"] = float(album.get("intScore"))
- if album.get("intScoreVotes"):
- album_info["theaudiodb_score_votes"] = int(
- album.get("intScoreVotes")
- )
- return album_info
|