Steven Smith revised this gist . Go to revision
1 file changed, 39 insertions, 17 deletions
gmgetalbum.py
| @@ -9,30 +9,52 @@ from mutagen import File | |||
| 9 | 9 | gmusic = gmusicapi.Mobileclient() | |
| 10 | 10 | gmusic.login(os.environ["GMUSICAPI_EMAIL"], os.environ["GMUSICAPI_PASSWORD"], os.environ["GMUSICAPI_MACADDR"]) | |
| 11 | 11 | ||
| 12 | - | def get_album(album_id): | |
| 13 | - | album = gmusic.get_album_info(album_id, include_tracks=True) | |
| 12 | + | def get_track(track_id): | |
| 13 | + | track = gmusic.get_track_info(track_id) | |
| 14 | 14 | try: | |
| 15 | - | os.makedirs(os.path.join(album["artist"], album["name"])) | |
| 15 | + | os.makedirs(os.path.join(track["artist"], track["album"])) | |
| 16 | 16 | except: | |
| 17 | 17 | pass | |
| 18 | - | for track in album["tracks"]: | |
| 19 | - | fn = os.path.join(track["artist"], track["album"], "{trackNumber:0>2} {artist} - {title}.mp3".format(**track).replace("/", "-")) | |
| 20 | - | print(fn) | |
| 21 | - | with open(fn, "wb") as f: | |
| 22 | - | f.write(requests.get(gmusic.get_stream_url(track["storeId"])).content) | |
| 23 | - | f = File(fn, easy=True) | |
| 24 | - | for x in ["title", "artist", "album", "trackNumber"]: | |
| 25 | - | if track[x]: | |
| 26 | - | f[x.lower()] = str(track[x]).zfill(2) | |
| 27 | - | f.save() | |
| 28 | - | return os.path.join(album["artist"], album["name"]) | |
| 18 | + | fn = os.path.join(track["artist"], track["album"], "{trackNumber:0>2} {artist} - {title}.mp3".format(**track).replace("/", "-")) | |
| 19 | + | print(fn, end="") | |
| 20 | + | with open(fn, "wb") as f: | |
| 21 | + | f.write(requests.get(gmusic.get_stream_url(track["storeId"])).content) | |
| 22 | + | f = File(fn, easy=True) | |
| 23 | + | for x in ["title", "artist", "album", "trackNumber"]: | |
| 24 | + | if track[x]: | |
| 25 | + | f[x.lower()] = str(track[x]).zfill(2) | |
| 26 | + | f.save() | |
| 27 | + | print("\r" + fn + " done") | |
| 28 | + | ||
| 29 | + | def get_album(album_id): | |
| 30 | + | album = gmusic.get_album_info(album_id, include_tracks=True) | |
| 31 | + | return album | |
| 32 | + | ||
| 33 | + | def get_artist(artist_id): | |
| 34 | + | artist = gmusic.get_artist_info(artist_id, include_albums=True) | |
| 35 | + | return artist | |
| 29 | 36 | ||
| 30 | 37 | def main(): | |
| 31 | 38 | parser = ArgumentParser() | |
| 32 | - | parser.add_argument("albumid", nargs="+") | |
| 39 | + | parser.add_argument("id", nargs="+") | |
| 33 | 40 | args = parser.parse_args() | |
| 34 | - | for album_id in args.albumid: | |
| 35 | - | print(get_album(album_id)) | |
| 41 | + | to_get = [] | |
| 42 | + | for _id in args.id: | |
| 43 | + | if _id[0] == "A": | |
| 44 | + | artist = get_artist(_id) | |
| 45 | + | for album in artist["albums"]: | |
| 46 | + | album = get_album(album["albumId"]) | |
| 47 | + | for track in album["tracks"]: | |
| 48 | + | to_get.append(track["storeId"]) | |
| 49 | + | elif _id[0] == "B": | |
| 50 | + | album = get_album(_id) | |
| 51 | + | for track in album["tracks"]: | |
| 52 | + | to_get.append(track["storeId"]) | |
| 53 | + | elif _id[0] == "T": | |
| 54 | + | to_get.append(_id) | |
| 55 | + | print("Queued {} items".format(len(to_get))) | |
| 56 | + | for trid in to_get: | |
| 57 | + | get_track(trid) | |
| 36 | 58 | return 0 | |
| 37 | 59 | ||
| 38 | 60 | if __name__ == "__main__": | |
Steven Smith revised this gist . Go to revision
1 file changed, 40 insertions
gmgetalbum.py(file created)
| @@ -0,0 +1,40 @@ | |||
| 1 | + | #!/usr/bin/env python3 | |
| 2 | + | ||
| 3 | + | import gmusicapi | |
| 4 | + | import os | |
| 5 | + | from argparse import ArgumentParser | |
| 6 | + | import requests | |
| 7 | + | from mutagen import File | |
| 8 | + | ||
| 9 | + | gmusic = gmusicapi.Mobileclient() | |
| 10 | + | gmusic.login(os.environ["GMUSICAPI_EMAIL"], os.environ["GMUSICAPI_PASSWORD"], os.environ["GMUSICAPI_MACADDR"]) | |
| 11 | + | ||
| 12 | + | def get_album(album_id): | |
| 13 | + | album = gmusic.get_album_info(album_id, include_tracks=True) | |
| 14 | + | try: | |
| 15 | + | os.makedirs(os.path.join(album["artist"], album["name"])) | |
| 16 | + | except: | |
| 17 | + | pass | |
| 18 | + | for track in album["tracks"]: | |
| 19 | + | fn = os.path.join(track["artist"], track["album"], "{trackNumber:0>2} {artist} - {title}.mp3".format(**track).replace("/", "-")) | |
| 20 | + | print(fn) | |
| 21 | + | with open(fn, "wb") as f: | |
| 22 | + | f.write(requests.get(gmusic.get_stream_url(track["storeId"])).content) | |
| 23 | + | f = File(fn, easy=True) | |
| 24 | + | for x in ["title", "artist", "album", "trackNumber"]: | |
| 25 | + | if track[x]: | |
| 26 | + | f[x.lower()] = str(track[x]).zfill(2) | |
| 27 | + | f.save() | |
| 28 | + | return os.path.join(album["artist"], album["name"]) | |
| 29 | + | ||
| 30 | + | def main(): | |
| 31 | + | parser = ArgumentParser() | |
| 32 | + | parser.add_argument("albumid", nargs="+") | |
| 33 | + | args = parser.parse_args() | |
| 34 | + | for album_id in args.albumid: | |
| 35 | + | print(get_album(album_id)) | |
| 36 | + | return 0 | |
| 37 | + | ||
| 38 | + | if __name__ == "__main__": | |
| 39 | + | import sys | |
| 40 | + | sys.exit(main()) | |