示例#1
0
def get_spotify_playlist(playlist):
    if playlist.startswith('http'):
        playlist_url = playlist
    else:
        playlist_url = 'http://open.spotify.com/user/{}/playlist/{}'.format(
            *re.search('spotify:user:(.+):playlist:(.+)', playlist).groups()
        )

    playlist_br = mechanize.Browser()
    playlist_br.open(playlist_url)

    playlist_name = re.search(r'<h1 itemprop="name">(.+)</h1>', playlist_br.response().read()).groups()[0]

    pl = Playlist(playlist_name.decode('utf8'), playlist)

    # http://docs.python.org/2/library/functions.html#filter
    track_links = filter(lambda x: x.url.startswith('/track/'), playlist_br.links())

    # http://docs.python.org/2/library/collections.html#ordereddict-objects
    tracks = collections.OrderedDict()
    for track_link in track_links:
        if not tracks.has_key(track_link.url):
            tracks[track_link.url] = {
                'mechanized_link': track_link,
                'track_url': 'http://open.spotify.com' + track_link.url,
                'title': track_link.text
            }

    for track in tracks.values():
        try:
            track_html = mechanize.urlopen(track['track_url']).read()
        except urllib2.HTTPError as e:
            print('{:}, HTTP Error 404, {:} not found'.format(track['title'], track['track_url']))
            track['artist_url'], track['artist'], track['album_url'], track['album'] = ('', '', '', '')
            continue

        # http://docs.python.org/2/library/re.html
        matches = re.search(
            r'<h1 itemprop="name">(.+)</h1>[ \t\n\r]*<h2> by <a href="(/artist/.+)">(.+)</a></h2>[ \t\n\r]*</div>[ \t\n\r]*<h3>Tracks in <a href="(/album/.+)">(.+)</a></h3>',
            track_html)

        track['title'], track['artist_url'], track['artist'], track['album_url'], track['album'] = matches.groups()
        title, artist, album = map(
            lambda s: html_parser.unescape(s.decode('utf-8', 'xmlcharrefreplace')),
            (track['title'], track['artist'], track['album'])
        )

        pl.add_track(
            Track(title, album, artist)
        )

    return pl
示例#2
0
    def get(self):
      
        tracks=memcache.get("front Videos playlists")
        if tracks is None:
            
            playlist=Playlist()
            playlist.tipo="predefined"
            
            playlist.create()
            tracks=playlist.getTracks()

            memcache.set("front Videos playlists",tracks)
        self.response.out.write(json.dumps(tracks))
示例#3
0
def reloadDatabase():
  global database, playlists
  try:
    database = getAudioDatabase(path)
    playlists = dict([(basename(f), Playlist.getPlaylist(f)) for f in playlistPaths])
  except ValueError as e:
    print(e)
    exit()
示例#4
0
文件: pl.py 项目: ilvar/playlisting
def gmaa_move():
    pl = Playlist.from_json(request.form['pl_data'])
    username, passwd = request.form['username'], request.form['password']

    api = Mobileclient()
    api.login(username, passwd)

    playlist_id = api.create_playlist(pl.name)

    for t in pl.tracks:
        try:
            tracks = api.search_all_access(u'%s - %s' % (t.artist, t.title), 1)
        except CallFailure:
            continue
        else:
            track_ids = [t['track']['nid'] for t in tracks['song_hits']]
            api.add_songs_to_playlist(playlist_id, track_ids)

    return render_template('ok.html', pl=pl)
示例#5
0
    def post(self):
        j=self.request.body
        data=json.loads(j)
        genre=data["data"]
        tracks=None
        tracks=memcache.get("%s Videos playlist"%genre)

        if tracks is None:
            playlist=Playlist()
            playlist.tipo="artist"
            playlist.param=data["data"]

            playlist.create()
            tracks=playlist.getTracks()

         
            memcache.set("%s Videos playlist"%genre, tracks)
        
        self.response.out.write(json.dumps(tracks))
示例#6
0
    def real_post(self):
        import time
        time_star=time.time()

        j=self.request.body
        data=json.loads(j)
        genre=data["data"]
        tracks=None
        tracks=memcache.get("%s Videos playlist"%genre)
        if tracks is None:

            playlist=Playlist()
            playlist.tipo="artist"
            playlist.param=data["data"]

            playlist.create()
            tracks=playlist.getTracks()
            memcache.set("%s Videos playlist"%genre, tracks)
        logging.error("total time of playlist= %s"%(time.time()-time.start()))
        self.response.out.write(json.dumps(tracks))
示例#7
0
    def post(self):
        logging.error("xhrCreateTagPlayList")
        j=self.request.body
        data=json.loads(j)
        genre=data["data"]
        
        tracks=None
  
        
        if tracks is None:

            playlist=Playlist()
            playlist.tipo="artist-radio"
            playlist.param=genre

            playlist.create()
            tracks={"tracks":playlist.getTracks(),"session":playlist.session}
  
          
           
        self.response.out.write(json.dumps(tracks))