Allow forcing updates from TADB

This commit is contained in:
2023-06-21 11:18:06 -04:00
parent e517327ce3
commit ad2f28c214
2 changed files with 25 additions and 7 deletions

View File

@ -104,10 +104,18 @@ class Artist(TimeStampedModel):
self.bandcamp_id = slug
self.save(update_fields=["bandcamp_id"])
def fix_metadata(self):
tadb_info = lookup_artist_from_tadb(self.name)
def fix_metadata(self, force_update=False):
tadb_info = {}
if self.theaudiodb_id and force_update:
tadb_info = lookup_artist_from_tadb(self.theaudiodb_id)
if not self.theaudiodb_id or (force_update and not tadb_info):
tadb_info = lookup_artist_from_tadb(self.name)
if not tadb_info:
logger.warn(f"No response from TADB for artist {self.name}")
logger.warn(
f"No response from TADB for artist {self.name}, try force_update=True"
)
return
self.biography = tadb_info["biography"]

View File

@ -7,23 +7,33 @@ 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: str) -> dict:
def lookup_artist_from_tadb(name_or_id: str) -> dict:
artist_info = {}
name = urllib.parse.quote(name)
name = urllib.parse.quote(name_or_id)
response = requests.get(ARTIST_SEARCH_URL + name)
found_by_name = True
if response.status_code != 200:
logger.warn(f"Bad response from TADB: {response.status_code}")
return {}
found_by_name = False
if not response.content:
logger.warn(f"Bad content from TADB: {response.content}")
return {}
found_by_name = False
if "null" in str(response.content):
logger.warn(f"Bad content from TADB: {response.content}")
found_by_name = False
if not found_by_name:
# Try using an TABD ID
response = requests.get(ARTIST_FETCH_URL + name_or_id)
results = json.loads(response.content)
if results["artists"]: