All pastes #948275 Raw Edit

Someone

public text v1 · immutable
·published 2008-03-19 00:31 UTC
rendered paste body
from 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