Last active 1541815657

I'm sure I've made this before...

gmgetalbum.py Raw
1#!/usr/bin/env python3
2
3import gmusicapi
4import os
5from argparse import ArgumentParser
6import requests
7from mutagen import File
8
9gmusic = gmusicapi.Mobileclient()
10gmusic.login(os.environ["GMUSICAPI_EMAIL"], os.environ["GMUSICAPI_PASSWORD"], os.environ["GMUSICAPI_MACADDR"])
11
12def get_track(track_id):
13 track = gmusic.get_track_info(track_id)
14 try:
15 os.makedirs(os.path.join(track["artist"], track["album"]))
16 except:
17 pass
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
29def get_album(album_id):
30 album = gmusic.get_album_info(album_id, include_tracks=True)
31 return album
32
33def get_artist(artist_id):
34 artist = gmusic.get_artist_info(artist_id, include_albums=True)
35 return artist
36
37def main():
38 parser = ArgumentParser()
39 parser.add_argument("id", nargs="+")
40 args = parser.parse_args()
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)
58 return 0
59
60if __name__ == "__main__":
61 import sys
62 sys.exit(main())