mirror of
https://github.com/krateng/maloja.git
synced 2023-08-10 21:12:55 +03:00
65 lines
1.6 KiB
Python
65 lines
1.6 KiB
Python
from . import MetadataInterface
|
|
import urllib.parse, urllib.request
|
|
import json
|
|
import time
|
|
import threading
|
|
from ..__pkginfo__ import USER_AGENT
|
|
|
|
class MusicBrainz(MetadataInterface):
|
|
name = "MusicBrainz"
|
|
identifier = "musicbrainz"
|
|
|
|
# musicbrainz is rate-limited
|
|
lock = threading.Lock()
|
|
useragent = USER_AGENT
|
|
|
|
settings = {
|
|
}
|
|
|
|
metadata = {
|
|
"response_type":"json",
|
|
"response_parse_tree_track": ["images",0,"image"],
|
|
"required_settings": [],
|
|
}
|
|
|
|
def get_image_artist(self,artist):
|
|
return None
|
|
# not supported
|
|
|
|
|
|
def get_image_track(self,track):
|
|
self.lock.acquire()
|
|
try:
|
|
artists, title = track
|
|
artiststring = ", ".join(artists) #Join artists collection into string
|
|
titlestring = title
|
|
querystr = urllib.parse.urlencode({
|
|
"fmt":"json",
|
|
"query":"{title} {artist}".format(artist=artiststring,title=titlestring)
|
|
})
|
|
req = urllib.request.Request(**{
|
|
"url":"https://musicbrainz.org/ws/2/release?" + querystr,
|
|
"method":"GET",
|
|
"headers":{
|
|
"User-Agent":self.useragent
|
|
}
|
|
})
|
|
response = urllib.request.urlopen(req)
|
|
responsedata = response.read()
|
|
data = json.loads(responsedata)
|
|
mbid = data["releases"][0]["id"]
|
|
response = urllib.request.urlopen(
|
|
"https://coverartarchive.org/release/{mbid}?fmt=json".format(mbid=mbid)
|
|
)
|
|
responsedata = response.read()
|
|
data = json.loads(responsedata)
|
|
imgurl = self.metadata_parse_response_track(data)
|
|
if imgurl is not None: imgurl = self.postprocess_url(imgurl)
|
|
return imgurl
|
|
|
|
except Exception:
|
|
return None
|
|
finally:
|
|
time.sleep(2)
|
|
self.lock.release()
|