mirror of
https://github.com/krateng/maloja.git
synced 2023-08-10 21:12:55 +03:00
Implemented track image fetcher interface
This commit is contained in:
parent
a097d34f10
commit
4c30ff5fa2
33
maloja/thirdparty/__init__.py
vendored
33
maloja/thirdparty/__init__.py
vendored
@ -7,6 +7,7 @@
|
|||||||
# pls don't sue me
|
# pls don't sue me
|
||||||
|
|
||||||
import xml.etree.ElementTree as ElementTree
|
import xml.etree.ElementTree as ElementTree
|
||||||
|
import json
|
||||||
import urllib.parse, urllib.request
|
import urllib.parse, urllib.request
|
||||||
from doreah.settings import get_settings
|
from doreah.settings import get_settings
|
||||||
from doreah.logging import log
|
from doreah.logging import log
|
||||||
@ -25,6 +26,10 @@ def proxy_scrobble_all(artists,title,timestamp):
|
|||||||
for service in services["proxyscrobble"]:
|
for service in services["proxyscrobble"]:
|
||||||
service.scrobble(artists,title,timestamp)
|
service.scrobble(artists,title,timestamp)
|
||||||
|
|
||||||
|
def get_image_track_all(track):
|
||||||
|
for service in services["metadata"]:
|
||||||
|
res = service.get_image_track(track)
|
||||||
|
if res is not None: return res
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -113,6 +118,30 @@ class MetadataInterface(GenericInterface,abstract=True):
|
|||||||
get_settings(self.metadata["activated_setting"])
|
get_settings(self.metadata["activated_setting"])
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def get_image_track(self,track):
|
||||||
|
artists, title = track
|
||||||
|
artiststring = urllib.parse.quote(", ".join(artists))
|
||||||
|
titlestring = urllib.parse.quote(title)
|
||||||
|
response = urllib.request.urlopen(
|
||||||
|
self.metadata["trackurl"].format(artist=artiststring,title=titlestring,**self.settings)
|
||||||
|
)
|
||||||
|
|
||||||
|
responsedata = response.read()
|
||||||
|
if self.metadata["response_type"] == "json":
|
||||||
|
data = json.loads(responsedata)
|
||||||
|
return self.metadata_parse_response(data)
|
||||||
|
|
||||||
|
# default function to parse response by descending down nodes
|
||||||
|
# override if more complicated
|
||||||
|
def metadata_parse_response(self,data):
|
||||||
|
res = data
|
||||||
|
for node in self.metadata["response_parse_tree"]:
|
||||||
|
try:
|
||||||
|
res = res[node]
|
||||||
|
except:
|
||||||
|
return None
|
||||||
|
return res
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -127,5 +156,7 @@ def utf(st):
|
|||||||
|
|
||||||
### actually create everything
|
### actually create everything
|
||||||
|
|
||||||
__all__ = ["lastfm"] # list them for now, do this dynamically later
|
__all__ = [
|
||||||
|
"lastfm"
|
||||||
|
]
|
||||||
from . import *
|
from . import *
|
||||||
|
9
maloja/thirdparty/lastfm.py
vendored
9
maloja/thirdparty/lastfm.py
vendored
@ -17,6 +17,15 @@ class LastFM(MetadataInterface, ProxyScrobbleInterface):
|
|||||||
"required_settings": ["apikey","sk","secret"],
|
"required_settings": ["apikey","sk","secret"],
|
||||||
"activated_setting": "SCROBBLE_LASTFM"
|
"activated_setting": "SCROBBLE_LASTFM"
|
||||||
}
|
}
|
||||||
|
metadata = {
|
||||||
|
"trackurl": "https://ws.audioscrobbler.com/2.0/?method=track.getinfo&track={title}&artist={artist}&api_key={apikey}&format=json",
|
||||||
|
"response_type":"json",
|
||||||
|
"response_parse_tree": ["track","album","image",3,"#text"],
|
||||||
|
"required_settings": ["apikey"],
|
||||||
|
"activated_setting": "METADATA_LASTFM"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def proxyscrobble_parse_response(self,data):
|
def proxyscrobble_parse_response(self,data):
|
||||||
return data.attrib.get("status") == "ok" and data.find("scrobbles").attrib.get("ignored") == "0"
|
return data.attrib.get("status") == "ok" and data.find("scrobbles").attrib.get("ignored") == "0"
|
||||||
|
@ -15,6 +15,7 @@ from doreah.logging import log
|
|||||||
from doreah.regular import yearly, daily
|
from doreah.regular import yearly, daily
|
||||||
|
|
||||||
from .external import api_request_track, api_request_artist
|
from .external import api_request_track, api_request_artist
|
||||||
|
from .thirdparty import get_image_track_all
|
||||||
from .__pkginfo__ import version
|
from .__pkginfo__ import version
|
||||||
from . import globalconf
|
from . import globalconf
|
||||||
from .globalconf import datadir
|
from .globalconf import datadir
|
||||||
@ -292,7 +293,8 @@ def getTrackImage(artists,title,fast=False):
|
|||||||
if fast: return "/image?title=" + urllib.parse.quote(title) + "&" + "&".join(["artist=" + urllib.parse.quote(a) for a in artists])
|
if fast: return "/image?title=" + urllib.parse.quote(title) + "&" + "&".join(["artist=" + urllib.parse.quote(a) for a in artists])
|
||||||
|
|
||||||
# non-fast lookup (esentially only the resolver lookup)
|
# non-fast lookup (esentially only the resolver lookup)
|
||||||
result = api_request_track((artists,title))
|
# result = api_request_track((artists,title))
|
||||||
|
result = get_image_track_all((artists,title))
|
||||||
|
|
||||||
# cache results (even negative ones)
|
# cache results (even negative ones)
|
||||||
#cachedTracks[(frozenset(artists),title)] = result
|
#cachedTracks[(frozenset(artists),title)] = result
|
||||||
|
Loading…
Reference in New Issue
Block a user