diff --git a/.gitignore b/.gitignore index 84db70d..4a38ca9 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ *.egg-info/ build/ dist/ +.idea diff --git a/soundcloud_cli/api/groups.py b/soundcloud_cli/api/groups.py new file mode 100644 index 0000000..6310fc8 --- /dev/null +++ b/soundcloud_cli/api/groups.py @@ -0,0 +1,12 @@ +from .client import get_client + + +def group(user_id): + client = get_client() + + page_size = 100 + offset = 0 + + return client.get('/users/{0}/groups'.format(user_id), order='created_at', + limit=page_size, + offset=offset) diff --git a/soundcloud_cli/api/groupshare.py b/soundcloud_cli/api/groupshare.py new file mode 100644 index 0000000..5ce8dac --- /dev/null +++ b/soundcloud_cli/api/groupshare.py @@ -0,0 +1,10 @@ +from .. import settings +from .client import get_client + + +def groupshare(group_id=None, track_id=None): + + client = get_client() + + # contribute track to group + return client.post('/groups/%s/contributions' % group_id, track={'id': track_id}) diff --git a/soundcloud_cli/cli.py b/soundcloud_cli/cli.py index 7a15087..bd840c7 100644 --- a/soundcloud_cli/cli.py +++ b/soundcloud_cli/cli.py @@ -38,7 +38,7 @@ def command_auth(args): settings.user = me.obj settings.user['name'] = me.username settings.save() - print 'authenticated as {0}.'.format(me.username) + print 'authenticated as {0}.'.format(me.username.encode('utf-8')) def command_defaults(args): @@ -81,11 +81,64 @@ def command_list(args): # find longest title to build formatting string title_len = max(len(t.title) for t in tracks) - format_spec = " {{0:<{0}}} {{1}}".format(title_len + 2) + format_spec = " {{0:<{0}}} {{1}} {{2}}".format(title_len + 2) - print 'tracks by {0}:'.format(username) + print 'tracks by {0}:'.format(username.encode('utf-8')) for track in tracks: - print format_spec.format(track.title, track.permalink_url) + print format_spec.format(track.title, track.permalink_url, track.id) + + +@utils.require_auth +def command_group(args): + from .api.groups import group + from .api.client import get_client + + client = get_client() + username = args.username + + if not username: + user_id = settings.user.get('id') + username = settings.user.get('name') + else: + user = settings.users.get(username, None) + if user: + user_id = user['id'] + else: + user = client.get('/resolve', url='https://soundcloud.com/{0}'.format(username)) + user_id = user.id + + groups = group(user_id) + + # find longest title to build formatting string + #group_len = max(len(g.group) for g in groups) + group_len = 8 + format_spec = " {{0:<{0}}} {{1}}".format(group_len + 2) + + print 'groups of {0}:'.format(username.encode('utf-8')) + for group in groups: + print format_spec.format(group.id, group.permalink_url) + + +@utils.require_auth +def command_groupshare(args): + from .api.groupshare import groupshare + + print args + + if args.track_id: + tracks = [t.strip() for t in args.track_id.split(',')] + else: + tracks = [] + + if args.group_id: + groups = [g.strip() for g in args.group_id.split(',')] + else: + groups = [] + + for group in groups: + for track in tracks: + groupshare(group,track) + print 'track %s has been shared with group %s' % (track,group) @utils.require_auth @@ -177,6 +230,15 @@ def main(): list_parser.add_argument('username', nargs='?', help='key') list_parser.set_defaults(command=command_list) + group_parser = subparsers.add_parser('group', help='list groups for given user') + group_parser.add_argument('username', nargs='?', help='key') + group_parser.set_defaults(command=command_group) + + groupshare_parser = subparsers.add_parser('groupshare', help='share track to group for given user') + groupshare_parser.add_argument('group_id', nargs='?', help='group you want to share track with') + groupshare_parser.add_argument('track_id', nargs='?', help='track you want to share') + groupshare_parser.set_defaults(command=command_groupshare) + share_parser = subparsers.add_parser('share', help='share track with users') share_parser.add_argument('track_url', help='track you want to share') share_parser.add_argument('users', nargs='?', help='users you want to share track with')