Last active 1541815657

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

Steven Smith revised this gist 1541851657. 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 1541849564. 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())
Newer Older