def emit(request, event, data): if request is None: uprint("Not emitting {0}".format(event)) return for ws in request.app['sockets']: ws.send_str(json.dumps({'eventName': event, 'eventData': data}))
def start(): sslcontext = ssl.create_default_context(cafile=certifi.where()) conn = aiohttp.TCPConnector(ssl_context=sslcontext) with ClientSession(connector=conn) as session: google_email = input("Enter Google email address: ") google_pass = getpass("Enter Google password: "******"Invalid Google username/password") sys.exit(1) user_id = input("Enter Hypem username: "******"Enter Hypem password: "******"Enter Y if you want to include explicit songs: ") if explicit == 'Y': content_type = 'E' else: content_type = 'R' h = HypemClient(session, user_id, password) # now fetch the json for the hypem popular top 50 playlist = yield from h.fetch_popular() # uprint("playlist", playlist) yield from app.transfer_hypem_playlist(None, h, g, playlist, content_type)
def setup(loop): app1 = web.Application(loop=loop, middlewares=[IndexMiddleware()]) app1['sockets'] = [] app1.router.add_route('POST', '/google/login', google_login) app1.router.add_route('POST', '/spotify/login', spotify_login) app1.router.add_route('POST', '/portify/transfer/start', transfer_start) app1.router.add_route('GET', '/spotify/playlists', spotify_playlists) app1.router.add_route('GET', '/ws/', wshandler) app1.router.add_static('/', STATIC_ROOT) handler1 = app1.make_handler() yield from loop.create_server(handler1, '0.0.0.0', 3132) uprint("Listening on http://0.0.0.0:3132") uprint("Please open your browser window to http://localhost:3132") return handler1
async def transfer_playlists(request, s, g, sp_playlist_uris): for sp_playlist_uri in sp_playlist_uris: sp_playlist = await s.fetch_playlist(sp_playlist_uri) sp_playlist_tracks = await s.fetch_playlist_tracks(sp_playlist_uri) track_count = len(sp_playlist_tracks) if track_count == 0: uprint("Skipping empty playlist %s" % (sp_playlist['name'])) continue uprint("Gathering tracks for playlist %s (%s)" % (sp_playlist['name'], track_count)) playlist_json = { "playlist": { "uri": sp_playlist_uri, "name": sp_playlist['name'] }, "name": sp_playlist['name'], } await emit_playlist_length(request, track_count) await emit_playlist_started(request, playlist_json) if not sp_playlist_tracks: await emit_playlist_ended(request, playlist_json) return tasks = [] for i, sp_track in enumerate(sp_playlist_tracks): query = SpotifyQuery(i, sp_playlist_uri, sp_track, track_count) future = search_gm_track(request, g, query) tasks.append(future) done = await asyncio.gather(*tasks) gm_track_ids = [i for i in done if i is not None] # Once we have all the gm_trackids, add them if len(gm_track_ids) > 0: uprint("Creating in Google Music... ", end='') sys.stdout.flush() for i, sub_gm_track_ids in enumerate(grouper(gm_track_ids, 1000)): name = sp_playlist['name'] if i > 0: name = "{} ({})".format(name, i + 1) playlist_id = await g.create_playlist(name) await \ g.add_songs_to_playlist(playlist_id, sub_gm_track_ids) uprint("Done") await emit_playlist_ended(request, playlist_json) await emit_all_done(request)
def start(): sslcontext = ssl.create_default_context(cafile=certifi.where()) conn = aiohttp.TCPConnector(ssl_context=sslcontext) with ClientSession(connector=conn) as session: google_email = input("Enter Google email address: ") google_pass = getpass("Enter Google password: "******"Invalid Google username/password") sys.exit(1) uprint("Go to {0} and get an oauth token".format(OAUTH_URL)) spotify_token = input("Enter Spotify oauth token: ") s = SpotifyClient(session, spotify_token) logged_in = yield from s.loggedin() if not logged_in: uprint("Invalid Spotify token") sys.exit(1) playlists = yield from s.fetch_spotify_playlists() playlists = [l['uri'] for l in playlists] yield from app.transfer_playlists(None, s, g, playlists)
def start(): sslcontext = ssl.create_default_context(cafile=certifi.where()) conn = aiohttp.TCPConnector(ssl_context=sslcontext) with ClientSession(connector=conn) as session: google_email = input("Enter Google email address: ") google_pass = getpass("Enter Google password: "******"Invalid Google username/password") sys.exit(1) uprint("Go to {0} and get an oauth token".format(OAUTH_URL)) spotify_token = input("Enter Spotify oauth token: ") s = SpotifyClient(session, spotify_token) logged_in = yield from s.loggedin() if not logged_in: uprint("Invalid Spotify token") sys.exit(1) playlists = yield from s.fetch_spotify_playlists() yield from app.transfer_playlists(None, s, g, playlists)
def setup(loop): app1 = web.Application(loop=loop) app1['sockets'] = [] app1.router.add_route('POST', '/google/login', google_login) app1.router.add_route('POST', '/spotify/login', spotify_login) app1.router.add_route('POST', '/portify/transfer/start', transfer_start) app1.router.add_route('GET', '/spotify/playlists', spotify_playlists) app1.router.add_route('GET', '/ws/', wshandler) app1.router.add_route( 'GET', r'/{url_path:.*}', dispatcher.static_factory('/', STATIC_ROOT), ) handler1 = app1.make_handler() yield from loop.create_server(handler1, '0.0.0.0', 3132) uprint("Listening on http://0.0.0.0:3132") uprint("Please open your browser window to http://localhost:3132") return handler1
async def start(): sslcontext = ssl.create_default_context(cafile=certifi.where()) conn = aiohttp.TCPConnector(ssl_context=sslcontext) with ClientSession(connector=conn) as session: g = Mobileclient(session) logged_in = await g.login(google_email, google_pass) if not logged_in: uprint("Invalid Google username/password") sys.exit(1) s = SpotifyClient(session, spotify_token) logged_in = await s.loggedin() if not logged_in: uprint("Invalid Spotify token") sys.exit(1) await test_percent_search(g) await test_playlist(s, g) return # di = await g.fetch_playlists() # import pprint # pprint.pprint(di['data']['items']) # # # playlist_id = await g.create_playlist("Test Playlist") # playlist_id = "2c02eca1-429e-4ce0-a4a8-819415cdee3a" # await g.add_songs_to_playlist( # playlist_id, # ['Twqujxontbfftlzi7hextragxyu'], # # ['ba3a473e-6309-3814-8c05-b8b6619f38f3'], # ) playlists = await s.fetch_spotify_playlists() playlists = [l['uri'] for l in playlists] await app.transfer_playlists(None, s, g, playlists)
def transfer_playlists(request, s, g, sp_playlist_uris): for sp_playlist_uri in sp_playlist_uris: sp_playlist = yield from s.fetch_playlist(sp_playlist_uri) sp_playlist_tracks = yield from s.fetch_playlist_tracks( sp_playlist_uri) track_count = len(sp_playlist_tracks) uprint( "Gathering tracks for playlist %s (%s)" % (sp_playlist['name'], track_count) ) playlist_json = { "playlist": { "uri": sp_playlist_uri, "name": sp_playlist['name'], }, "name": sp_playlist['name'], } yield from emit_playlist_length(request, track_count) yield from emit_playlist_started(request, playlist_json) if not sp_playlist_tracks: yield from emit_playlist_ended(request, playlist_json) return tasks = [] for i, sp_track in enumerate(sp_playlist_tracks): query = SpotifyQuery(i, sp_playlist_uri, sp_track, track_count) future = search_gm_track(request, g, query) tasks.append(future) done = yield from asyncio.gather(*tasks) gm_track_ids = [i for i in done if i is not None] # Once we have all the gm_trackids, add them if len(gm_track_ids) > 0: uprint("Creating in Google Music... ", end='') sys.stdout.flush() gm_track_ids_without_duplicated = list(OrderedDict.fromkeys(gm_track_ids)) tracks_lists = list(chunks(gm_track_ids_without_duplicated, 999)) # Creates a playlist for each 999 tracks (GM has a 1000 tracks playlist limit) for key, track_list in enumerate(tracks_lists): playlist_title = sp_playlist['name'] if len(tracks_lists) > 1: playlist_title = '{0} {1}/{2}'.format(playlist_title, str(key+1), str(len(tracks_lists))) playlist_id = yield from g.create_playlist(playlist_title) created = yield from g.add_songs_to_playlist(playlist_id, track_list) uprint("Done") yield from emit_playlist_ended(request, playlist_json) yield from emit_all_done(request)
def transfer_playlists(request, s, g, playlist, content_type, sp_playlist_uris): for sp_playlist_uri in sp_playlist_uris: sp_playlist = yield from s.fetch_playlist(sp_playlist_uri['uri']) if sp_playlist['name'] != playlist: continue sp_playlist_tracks = yield from s.fetch_playlist_tracks( sp_playlist_uri['uri']) track_count = len(sp_playlist_tracks) uprint("Gathering tracks for playlist %s (%s)" % (sp_playlist['name'], track_count)) playlist_json = { "playlist": { "uri": sp_playlist_uri['uri'], "name": sp_playlist['name'], }, "name": sp_playlist['name'], } yield from emit_playlist_length(request, track_count) yield from emit_playlist_started(request, playlist_json) if not sp_playlist_tracks: yield from emit_playlist_ended(request, playlist_json) return tasks = [] for i, sp_track in enumerate(sp_playlist_tracks): query = SpotifyQuery(i, sp_playlist_uri['uri'], sp_track, track_count) future = search_gm_track(request, g, query, content_type) tasks.append(future) done, _ = yield from asyncio.wait(tasks) track_ids = [i.result() for i in done if i.result() is not None] gm_track_ids = [x[1] for x in sorted(track_ids)] # Once we have all the gm_trackids, add them if len(gm_track_ids) > 0: uprint("Creating in Google Music...", end='') sys.stdout.flush() playlist_id = yield from g.create_playlist(sp_playlist['name']) yield from g.add_songs_to_playlist(playlist_id, gm_track_ids) uprint("Done") yield from emit_playlist_ended(request, playlist_json) yield from emit_all_done(request)
def transfer_playlists(request, s, g, sp_playlist_uris): for sp_playlist_uri in sp_playlist_uris: sp_playlist = yield from s.fetch_playlist(sp_playlist_uri) sp_playlist_tracks = yield from s.fetch_playlist_tracks( sp_playlist_uri) track_count = len(sp_playlist_tracks) uprint( "Gathering tracks for playlist %s (%s)" % (sp_playlist['name'], track_count) ) playlist_json = { "playlist": { "uri": sp_playlist_uri, "name": sp_playlist['name'], }, "name": sp_playlist['name'], } yield from emit_playlist_length(request, track_count) yield from emit_playlist_started(request, playlist_json) if not sp_playlist_tracks: yield from emit_playlist_ended(request, playlist_json) return tasks = [] for i, sp_track in enumerate(sp_playlist_tracks): query = SpotifyQuery(i, sp_playlist_uri, sp_track, track_count) future = search_gm_track(request, g, query) tasks.append(future) done, _ = yield from asyncio.wait(tasks) gm_track_ids = [i.result() for i in done if i.result() is not None] # Once we have all the gm_trackids, add them if len(gm_track_ids) > 0: uprint("Creating in Google Music... ", end='') sys.stdout.flush() playlist_id = yield from g.create_playlist(sp_playlist['name']) yield from g.add_songs_to_playlist(playlist_id, gm_track_ids) uprint("Done") yield from emit_playlist_ended(request, playlist_json) yield from emit_all_done(request)
def start(): sslcontext = ssl.create_default_context(cafile=certifi.where()) conn = aiohttp.TCPConnector(ssl_context=sslcontext) with ClientSession(connector=conn) as session: google_email = input("Enter Google email address: ") google_pass = getpass("Enter Google password: "******"Invalid Google username/password") sys.exit(1) user_id = input("Enter Spotify User to copy playlist from: ") playlist = input( "Enter the User's Spotify playlist you want to copy: ") explicit = input("Enter Y if you want to include explicit songs: ") if explicit == 'Y': content_type = 'E' else: content_type = 'R' uprint("Go to {0} and get an oauth token".format(OAUTH_URL)) spotify_token = input("Enter Spotify oauth token: ") s = SpotifyClient(session, spotify_token, user_id) logged_in = yield from s.loggedin() if not logged_in: uprint("Invalid Spotify token") sys.exit(1) playlists = yield from s.fetch_spotify_playlists() yield from app.transfer_playlists(None, s, g, playlist, content_type, playlists)
def start(): sslcontext = ssl.create_default_context(cafile=certifi.where()) conn = aiohttp.TCPConnector(ssl_context=sslcontext) with ClientSession(connector=conn) as session: google_email = input("Enter Google email address: ") google_pass = getpass("Enter Google password: "******"Invalid Google username/password") sys.exit(1) user_id = input("Enter Spotify User to copy playlist from: ") playlist = input("Enter the User's Spotify playlist you want to copy: ") explicit = input("Enter Y if you want to include explicit songs: ") if explicit == 'Y': content_type = 'E' else: content_type = 'R' uprint("Go to {0} and get an oauth token".format(OAUTH_URL)) spotify_token = input("Enter Spotify oauth token: ") s = SpotifyClient(session, spotify_token, user_id) logged_in = yield from s.loggedin() if not logged_in: uprint("Invalid Spotify token") sys.exit(1) playlists = yield from s.fetch_spotify_playlists() yield from app.transfer_playlists(None, s, g, playlist, content_type, playlists)
def gm_log_not_found(sp_query): uprint("({0}/{1}) No match found for '{2}' in Google Music".format( sp_query.i+1, sp_query.track_count, sp_query.search_query()))