gmgetalbum.py
· 1.3 KiB · Python
Raw
#!/usr/bin/env python3
import gmusicapi
import os
from argparse import ArgumentParser
import requests
from mutagen import File
gmusic = gmusicapi.Mobileclient()
gmusic.login(os.environ["GMUSICAPI_EMAIL"], os.environ["GMUSICAPI_PASSWORD"], os.environ["GMUSICAPI_MACADDR"])
def get_album(album_id):
album = gmusic.get_album_info(album_id, include_tracks=True)
try:
os.makedirs(os.path.join(album["artist"], album["name"]))
except:
pass
for track in album["tracks"]:
fn = os.path.join(track["artist"], track["album"], "{trackNumber:0>2} {artist} - {title}.mp3".format(**track).replace("/", "-"))
print(fn)
with open(fn, "wb") as f:
f.write(requests.get(gmusic.get_stream_url(track["storeId"])).content)
f = File(fn, easy=True)
for x in ["title", "artist", "album", "trackNumber"]:
if track[x]:
f[x.lower()] = str(track[x]).zfill(2)
f.save()
return os.path.join(album["artist"], album["name"])
def main():
parser = ArgumentParser()
parser.add_argument("albumid", nargs="+")
args = parser.parse_args()
for album_id in args.albumid:
print(get_album(album_id))
return 0
if __name__ == "__main__":
import sys
sys.exit(main())
| 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()) |