rendered paste bodyfrom elisa.base_components.resource_provider import ResourceProvider
from elisa.core.media_uri import MediaUri
from elisa.core import common, component
from twisted.internet import defer, threads
from twisted.web import client
import re, simplejson
class JamendoResource(ResourceProvider):
supported_uri = "http://(www\.)?jamendo\.com.*"
ml2_base = "http://api.jamendo.com/get"
jam_base = "http://(?:www\.)jamendo.com(?:/[a-z]{2})?/"
jam_regex = {"main" : ("?$", ["2/name+artist_name+url+image/album/json/?n=50&order=ratingweek_desc&imagesize=600"]),
"tags" : ("tags", ["2/idstr+name+url/tag/json/?n=50&order=rating_desc"]),
"tag" : ("tag/([^/]+)", ["2/name+artist_name+url+image/album/json/?tag_idstr=\1&n=50&order=ratingweek_desc&imagesize=600"]),
"artists" : ("artists", ["2/name+url+image/artist/plain/?n=50&order=id_desc&imagesize=600"]),
"artist" : ("artist/([^/]+)", ["2/name+url/track/json/track_album+album_artist/?artist_idstr=\1&n=5&order=rating_desc","2/name+url+artist_name+image/album/json/?artist_idstr=\1&n=all&imagesize=600"]),
"albums" : ("albums", ["2/name+artist_name+url+image/album/json/?&n=50&order=ratingweek_desc&imagesize=600"]),
"album" : ("album/([0-9]+)", ["2/name+url/track/json/?n=all&album_id=\1&order=numalbum_asc"]),
"track" : ("track/([0-9]+)", ["/track/id/track/audio/redirect/\1/?aue=ogg2"])
}
_jam_compiled = {}
def initialize(self):
ResourceProvider.initialize(self)
resource_manager = common.application.resource_manager
uris = {u'main' : MediaUri("http://jamendo.com"),
u'tags' : MediaUri("http://jamendo.com/en/tags"),
u'rock' : MediaUri("http://jamendo.com/en/tag/rock"),
u'artists' : MediaUri("http://jamendo.com/en/artists"),
u'both' : MediaUri("http://jamendo.com/en/artist/both"),
u'albums' : MediaUri("http://jamendo.com/en/albums"),
u'simple' : MediaUri("http://jamendo.com/en/album/33"),
u'enatten' : MediaUri("http://jamendo.com/en/track/1100")
}
for k,v in uris.iteritems():
resource_manager.register_resource_entry_point(v, text=k,
type="audio_internet",
theme_icon="audio_directory_icon")
def _musiclist_uri(self, uri):
for k, v in self.jam_compiled.iteritems():
if(v[0].match(uri)):
return [MediaUri(v[0].sub(self.ml2_base+s)) for s in v[1]]
return False
def get(self, uri, context_model=None):
self.debug("Should get %s" % uri)
print self._musiclist_uri(uri)
return None
def jam_compiled__get(self):
if self._jam_compiled is None:
for k, v in self.jam_regex.iteritems():
_jam_compiled[k] = re.compile(self.jam_base+v[0]), v[1]
return _jam_compiled