Last active 1541815657

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

Revision 290d3bb06a8e232cd71592d5e9d27ec5ddd78538

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_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
30def 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
38if __name__ == "__main__":
39 import sys
40 sys.exit(main())