$ edit pm_imported.py
Replace USER and PASS with your own credentials
$ python pm_importer.py
# Enjoy.
(Requires python3 and gmusicapi)
| #!usr/bin/env python | |
| import sys | |
| import csv | |
| from gmusicapi import Mobileclient | |
| api = Mobileclient() | |
| logged_in = api.login('USER', 'PASS', Mobileclient.FROM_MAC_ADDRESS) | |
| if not logged_in: | |
| print('Unable to login') | |
| sys.exit(1) | |
| # Local CSV file | |
| library = {} | |
| with open('songs.csv', 'r') as csvfile: | |
| reader = csv.reader(csvfile, delimiter=',', quotechar='"') | |
| next(reader) | |
| for row in reader: | |
| name, artist, album, tracknumber = row | |
| if artist in library: | |
| if album in library[artist]: | |
| continue | |
| library[artist].append(album) | |
| else: | |
| library[artist] = [album] | |
| # Remote library | |
| upstream = {} | |
| all_songs = api.get_all_songs() | |
| for song in all_songs: | |
| artist = song['artist'] | |
| album = song['album'] | |
| if artist in upstream: | |
| if album in upstream[artist]: | |
| continue | |
| upstream[artist].append(album) | |
| else: | |
| upstream[artist] = [album] | |
| # Add missing entries | |
| for artist_name in library: | |
| for album_name in library[artist_name]: | |
| if artist_name in upstream and album_name in upstream[artist_name]: | |
| print('Skip %s %s!' % (artist_name, album_name)) | |
| continue | |
| try: | |
| search_results = api.search_all_access('%s %s' % (artist_name, album_name))['album_hits'] | |
| if len(search_results) > 1: | |
| print('Too many matches for %s %s!' % (artist_name, album_name)) | |
| elif len(search_results) == 0: | |
| print('No matches for %s %s!' % (artist_name, album_name)) | |
| else: | |
| album = search_results[0]['album'] | |
| album_info = api.get_album_info(album['albumId'], True) | |
| for track in album_info['tracks']: | |
| print('%s - %s - %s' % (track['artist'], track['album'], track['title'])) | |
| api.add_aa_track(track['storeId']) | |
| except e: | |
| print(e) | |
| continue |