Fixed MusicBrainz download

Now downloading cover art using MusicBrainz API.
`urllib3` is no longer required.
This commit is contained in:
markjfine 2021-04-23 12:01:32 -04:00 committed by GitHub
parent 1143cdd853
commit aa49f2ae17
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 19 deletions

View File

@ -13,7 +13,6 @@ The folowing programs are required to run NRSC5-DUI
* [Pillow](https://pillow.readthedocs.io/en/stable/) * [Pillow](https://pillow.readthedocs.io/en/stable/)
* [NumPy](http://www.numpy.org) * [NumPy](http://www.numpy.org)
* [Python Dateutil](https://pypi.org/project/python-dateutil) * [Python Dateutil](https://pypi.org/project/python-dateutil)
* [urllib3](https://pypi.org/project/urllib3)
* [musicbrainzngs](https://pypi.org/project/musicbrainzngs) * [musicbrainzngs](https://pypi.org/project/musicbrainzngs)
* [nrsc5](https://github.com/theori-io/nrsc5) * [nrsc5](https://github.com/theori-io/nrsc5)
* [sox](https://github.com/chirlu/sox) * [sox](https://github.com/chirlu/sox)

View File

@ -21,7 +21,7 @@
# Updated and enhanced by markjfine ~ 2021 # Updated and enhanced by markjfine ~ 2021
#import os, sys, shutil, re, gtk, gobject, json, datetime, numpy, glob, time, platform #import os, sys, shutil, re, gtk, gobject, json, datetime, numpy, glob, time, platform
import os, pty, select, sys, shutil, re, json, datetime, numpy, glob, time, platform import os, pty, select, sys, shutil, re, json, datetime, numpy, glob, time, platform, io
from subprocess import Popen, PIPE from subprocess import Popen, PIPE
from threading import Timer, Thread from threading import Timer, Thread
from dateutil import tz from dateutil import tz
@ -31,8 +31,6 @@ import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, GObject, Gdk, GdkPixbuf, GLib from gi.repository import Gtk, GObject, Gdk, GdkPixbuf, GLib
import urllib3
#from OpenSSL import SSL
import musicbrainzngs import musicbrainzngs
# print debug messages to stdout (if debugger is attached) # print debug messages to stdout (if debugger is attached)
@ -58,7 +56,6 @@ class NRSC5_DUI(object):
self.getControls() # get controls and windows self.getControls() # get controls and windows
self.initStreamInfo() # initilize stream info and clear status widgets self.initStreamInfo() # initilize stream info and clear status widgets
self.http = urllib3.PoolManager()
self.debugLog("Local path determined as " + runtimeDir) self.debugLog("Local path determined as " + runtimeDir)
@ -345,15 +342,10 @@ class NRSC5_DUI(object):
global aasDir global aasDir
got_cover = False got_cover = False
# only change when there's a new ID3
#if (self.id3Changed):
# only care about the first artist listed if separated by slashes # only care about the first artist listed if separated by slashes
newArtist = self.fix_artist() newArtist = self.fix_artist()
baseStr = str(newArtist+" - "+self.streamInfo["Title"]) baseStr = str(newArtist+" - "+self.streamInfo["Title"])
saveStr = os.path.join(aasDir, baseStr.replace(" ","_").replace("/","_").replace(":","_")+".jpg") saveStr = os.path.join(aasDir, baseStr.replace(" ","_").replace("/","_").replace(":","_")+".jpg")
#searchStr = baseStr.replace(" ","+")
#print("Searching for:"+searchStr)
# does it already exist? # does it already exist?
if (os.path.isfile(saveStr)): if (os.path.isfile(saveStr)):
@ -371,7 +363,9 @@ class NRSC5_DUI(object):
resultID = "" resultID = ""
for (idx, release) in enumerate(result['release-list']): for (idx, release) in enumerate(result['release-list']):
#print(release["artist-credit-phrase"]+" - "+release['title']+" "+release['id']) #print(release["artist-credit-phrase"]+" - "+release['title']+" "+release['id'])
if (newArtist.lower() in release["artist-credit-phrase"].lower()) and (self.streamInfo["Title"].lower() in release['title'].lower()): 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'] resultID = release['id']
# got a match, now get the cover art # got a match, now get the cover art
@ -379,17 +373,17 @@ class NRSC5_DUI(object):
imageList = musicbrainzngs.get_image_list(resultID) imageList = musicbrainzngs.get_image_list(resultID)
for image in imageList["images"]: for image in imageList["images"]:
if "Front" in image["types"] and image["approved"]: if "Front" in image["types"] and image["approved"]:
resultURL = image["thumbnails"]["large"]
#print("{} is an approved front image".format(resultURL))
# now save it # now save it
# TODO - Use built-in MusicBrainz routine to eliminate need for urllib3 and OpenSSL for just this remaining call #print("Found approved image")
#with musicbrainzngs.get_image_front(resultID, size="500") as r, open(saveStr, 'wb') as out_file: imgData = musicbrainzngs.get_image_front(resultID, size="500")
with self.http.request('GET', resultURL, preload_content=False) as r, open(saveStr, 'wb') as out_file: if (len(imgData) > 0):
if (r.status == 200): dataBytes = io.BytesIO(imgData)
shutil.copyfileobj(r, out_file) imgCvr = Image.open(dataBytes)
self.coverImage = saveStr imgCvr.save(saveStr)
self.coverImage = saveStr
break break
break break
# If no match use the station logo if there is one # If no match use the station logo if there is one