From 16877d83cde05af263ce37a7f7e2c3874ff44f8a Mon Sep 17 00:00:00 2001 From: markjfine Date: Fri, 23 Apr 2021 15:25:47 -0400 Subject: [PATCH] MusicBrainz Query Heavily tweaked the query from releases to 'official' recordings (which includes matching track names). Picks the first one that is above a 90% match for any single, album, or EP, and of course has a valid Front image. Seems to lean towards providing album covers, whereas the release query only gave you singles. --- nrsc5-dui.py | 42 +++++++++++++++++++++++++++++------------- 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/nrsc5-dui.py b/nrsc5-dui.py index 721a8ea..d62c569 100644 --- a/nrsc5-dui.py +++ b/nrsc5-dui.py @@ -354,25 +354,37 @@ class NRSC5_DUI(object): # if not, get it from MusicBrainz else: try: - result = musicbrainzngs.search_releases(artist=self.streamInfo["Artist"], release=self.streamInfo["Title"]) + result = musicbrainzngs.search_recordings(artist=self.streamInfo["Artist"], recording=self.streamInfo["Title"]) - if result['release-list']: + if result['recording-list']: # loop through the list until you get a match - #print() resultID = "" - for (idx, release) in enumerate(result['release-list']): - #print(release["artist-credit-phrase"]+" - "+release['title']+" "+release['id']) - artistMatch = (newArtist.lower() in release["artist-credit-phrase"].lower()) - titleMatch = (self.streamInfo["Title"].lower() in release['title'].lower()) - if (artistMatch and titleMatch): - resultID = release['id'] - + imgSaved = False + for (idx, release) in enumerate(result['recording-list']): + resultScore=release['ext:score'] + resultArtist=release['artist-credit-phrase'] + resultTitle=release['title'] + resultid=release['id'] + for (idx2, release2) in enumerate(release['release-list']): + resultStatus=release2['status'] + resultType=release2['release-group']['type'] + resultid = release2['id'] + typeMatch = (resultType in ['Single','Album','EP']) + statusMatch = (resultStatus == 'Official') + if (typeMatch and statusMatch): + break + scoreMatch = (int(resultScore) > 90) + artistMatch = (newArtist.lower() in resultArtist.lower()) + titleMatch = (self.streamInfo["Title"].lower() in resultTitle.lower()) + if (artistMatch and titleMatch and scoreMatch): + resultID=resultid + # got a match, now get the cover art - #print("Found {} - {}, {}".format(release["artist-credit-phrase"], release['title'], resultID)) + #print("Found {}: {} - {}, {} {}%".format(resultType, resultArtist, resultTitle, resultID, resultScore)) imageList = musicbrainzngs.get_image_list(resultID) for image in imageList["images"]: - if "Front" in image["types"] and image["approved"]: + if "Front" in image["types"]: # and image["approved"]: # now save it #print("Found approved image") @@ -382,9 +394,13 @@ class NRSC5_DUI(object): imgCvr = Image.open(dataBytes) imgCvr.save(saveStr) self.coverImage = saveStr + imgSaved = True + + if (imgSaved): break - break + if (imgSaved): + break # If no match use the station logo if there is one else: