ocarina/libsaria/path/lastfm.py
Bryan Schumaker bafdc6ef20 libsaria: Manually set artwork through a copy_in_file() function
I created this function in the cache to make a generic way to copy
outside files into the cache tree.  It makes sense to do this in the
cache, since I want to keep everything self-contained.
2011-05-07 16:49:41 -04:00

81 lines
1.9 KiB
Python

# Bryan Schumaker (10/24/2010)
import libsaria
from libsaria import sources
from libsaria import web
from libsaria import xm
from libsaria import callbacks
from libsaria import threads
from libsaria import storage
from libsaria.storage import cache
file_id = libsaria.path.file_id
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]
try:
file = url.open()
except:
return None
if file == None:
return None
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(artist, album, title, file):
req = LastFmRequest("album.getInfo")
req["album"] = album
req["artist"] = artist
doc = req.place()
if doc == None:
return False
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_album_art(file):
id, artist, album, title = sources.get_attrs("id", "artist", "album", "title")
file = cache.get_item(artist, album, title, "Folder.jpg", lfm_cache_album)
callbacks.get_art(file, id)
def get_artwork(file):
threads.background(get_album_art, file)
def set_artwork(artist, album, img_path):
cache.copy_in_file(artist, album, "Folder.jpg", img_path)