Initial commit
This commit is contained in:
commit
1c38a7a37e
|
@ -0,0 +1,68 @@
|
||||||
|
#!/usr/bin/python3 -B
|
||||||
|
|
||||||
|
# https://developer.spotify.com/console/
|
||||||
|
|
||||||
|
from urllib import request
|
||||||
|
from json import loads as json_read, dumps as json_write
|
||||||
|
from random import shuffle
|
||||||
|
from time import strftime
|
||||||
|
|
||||||
|
|
||||||
|
def get_or_post (token, url, data = None):
|
||||||
|
d = None
|
||||||
|
if type (data) == bytes:
|
||||||
|
d = data
|
||||||
|
elif type (data) == str:
|
||||||
|
d = data.encode ('UTF-8')
|
||||||
|
t = request.urlopen (request.Request (url, data = d, headers = {'Authorization': 'Bearer ' + token}))
|
||||||
|
return (json_read (t.read ()))
|
||||||
|
|
||||||
|
|
||||||
|
def get_user_id (token):
|
||||||
|
return (get_or_post (token, 'https://api.spotify.com/v1/me') ['id'])
|
||||||
|
|
||||||
|
|
||||||
|
def list_playlists (token):
|
||||||
|
r = {}
|
||||||
|
for i in get_or_post (token, 'https://api.spotify.com/v1/me/playlists') ['items']:
|
||||||
|
r [i ['id']] = i ['name']
|
||||||
|
return (r)
|
||||||
|
|
||||||
|
|
||||||
|
def read_playlist (token, id):
|
||||||
|
r = []
|
||||||
|
index = 0
|
||||||
|
limit = 100
|
||||||
|
while True:
|
||||||
|
count = 0
|
||||||
|
for i in get_or_post (token, 'https://api.spotify.com/v1/playlists/' + id + '/tracks?offset=' + str (index) + '&limit=' + str (limit)) ['items']:
|
||||||
|
r.append (i ['track'] ['uri'])
|
||||||
|
count += 1
|
||||||
|
index += limit
|
||||||
|
if count != limit:
|
||||||
|
break
|
||||||
|
return (r)
|
||||||
|
|
||||||
|
|
||||||
|
def create_playlist (token, name, description, tracks):
|
||||||
|
playlist_id = get_or_post (token, 'https://api.spotify.com/v1/users/' + get_user_id (token) + '/playlists', data = json_write ({'name': name, 'description': description, 'public': False})) ['id']
|
||||||
|
|
||||||
|
p = 0
|
||||||
|
limit = 100
|
||||||
|
while True:
|
||||||
|
t = tracks [p:p+limit]
|
||||||
|
get_or_post (token, 'https://api.spotify.com/v1/playlists/' + playlist_id + '/tracks', data = json_write ({'position': p, 'uris': t}))
|
||||||
|
if len (t) == limit:
|
||||||
|
p += limit
|
||||||
|
else:
|
||||||
|
break
|
||||||
|
|
||||||
|
|
||||||
|
def playlist_shuffle (token, playlist):
|
||||||
|
tracks = read_playlist (token, playlist)
|
||||||
|
shuffle (tracks)
|
||||||
|
create_playlist (token, list_playlists (token) [playlist] + ' - Shuffled ' + strftime ('%Y-%m-%d %H:%M:%S'), 'Shuffled playlist', tracks)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
raise (NotImplementedError ('no CLI interface yet'))
|
Loading…
Reference in New Issue