last.fm for album art
Whenever a new song is loaded, we check the cache for album art. If we don't have art yet, then we place a request to the last.fm to find an image.
This commit is contained in:
parent
657d016017
commit
3a81afdc92
|
@ -23,6 +23,7 @@ cache = Cache()
|
|||
|
||||
plugin = None
|
||||
music = None
|
||||
lastfm = None
|
||||
|
||||
|
||||
# Initialize helpful variables
|
||||
|
@ -30,10 +31,12 @@ def init():
|
|||
global vars
|
||||
global prefs
|
||||
global music
|
||||
global lastfm
|
||||
|
||||
vars = Map()
|
||||
prefs = Map("preferences")
|
||||
import music
|
||||
import lastfm
|
||||
|
||||
event.start("POSTINIT")
|
||||
|
||||
|
|
|
@ -0,0 +1,68 @@
|
|||
# Bryan Schumaker (10/24/2010)
|
||||
|
||||
import libsaria
|
||||
import web
|
||||
import xm
|
||||
|
||||
cache = libsaria.cache
|
||||
pref_attr = xm.find_preferred_attribute
|
||||
|
||||
pref_sizes = ["extralarge", "large", "medium", "small"]
|
||||
|
||||
APIROOT = "http://ws.audioscrobbler.com/2.0/"
|
||||
APIKEY = "2c76f85a6704efd74b5a358821284ef9"
|
||||
SECRET = "3a6012bfb627b60a884cf33fc044885c"
|
||||
|
||||
|
||||
class LastFmRequest(dict):
|
||||
def __init__(self, method):
|
||||
self.method = method
|
||||
|
||||
def print_file(self, file):
|
||||
for line in file:
|
||||
print line.strip()
|
||||
file.seek(0)
|
||||
|
||||
def place(self, printfile=False):
|
||||
url = web.Url(APIROOT + "?method=" + self.method)
|
||||
url["api_key"] = APIKEY
|
||||
for param in self:
|
||||
url[param] = self[param]
|
||||
file = url.open()
|
||||
if printfile==True:
|
||||
self.print_file(file)
|
||||
doc = xm.parse( file )
|
||||
lfm = xm.child(doc)
|
||||
if xm.attributes(lfm)["status"] == "ok":
|
||||
return xm.child(lfm)
|
||||
else:
|
||||
return None
|
||||
|
||||
def lfm_cache_album(file, artist, album):
|
||||
req = LastFmRequest("album.getInfo")
|
||||
req["album"] = album
|
||||
req["artist"] = artist
|
||||
doc = req.place()
|
||||
node = pref_attr(doc, "image", "size", pref_sizes)
|
||||
node = xm.child(node)
|
||||
if node == None:
|
||||
return
|
||||
try:
|
||||
url = web.Url(node.data)
|
||||
for line in url.open():
|
||||
file.write(line)
|
||||
return True
|
||||
except:
|
||||
pass
|
||||
return False
|
||||
|
||||
def get_artwork(filepath):
|
||||
id = libsaria.collection.lib_find_id(filepath)
|
||||
if id == None:
|
||||
return
|
||||
artist = libsaria.collection.lib_get_attr(id, "artist")
|
||||
album = libsaria.collection.lib_get_attr(id, "album")
|
||||
cached = cache[artist]
|
||||
file = cached.get("%s.jpg" % album, lfm_cache_album, artist, album)
|
||||
libsaria.event.start("POSTGETART", file)
|
||||
libsaria.event.invite("POSTLOAD", get_artwork, True)
|
Loading…
Reference in New Issue