From e9c247ead9dc3c1745cfe2b0e79d19378ed18625 Mon Sep 17 00:00:00 2001 From: Ritiek Date: Fri, 16 Jun 2017 14:35:14 +0530 Subject: [PATCH] Switch to class for embedding metadata --- core/embed_metadata.py | 102 --------------------------------------- core/metadata.py | 106 +++++++++++++++++++++++++++++++++++++++++ spotdl.py | 17 +++---- 3 files changed, 115 insertions(+), 110 deletions(-) delete mode 100644 core/embed_metadata.py create mode 100644 core/metadata.py diff --git a/core/embed_metadata.py b/core/embed_metadata.py deleted file mode 100644 index 45625a0..0000000 --- a/core/embed_metadata.py +++ /dev/null @@ -1,102 +0,0 @@ -import urllib2 -from mutagen.easyid3 import EasyID3 -from mutagen.id3 import ID3, APIC -from mutagen.mp4 import MP4, MP4Cover - -def compare_metadata(file, metadata): - try: - if file.endswith('.mp3'): - audiofile = EasyID3('Music/' + file) - already_tagged = audiofile['title'][0] == metadata['name'] - elif file.endswith('.m4a'): - tag = {'title': '\xa9nam'} - audiofile = MP4('Music/' + file) - already_tagged = audiofile[tags['title']] == metadata['name'] - except KeyError: - already_tagged = False - return already_tagged - -def embed_metadata(music_file, meta_tags, output_ext): - if meta_tags is None: - print('Could not find meta-tags') - elif output_ext == '.m4a': - print('Fixing meta-tags') - metadata_m4a(music_file, meta_tags, output_ext) - elif output_ext == '.mp3': - print('Fixing meta-tags') - metadata_mp3(music_file, meta_tags, output_ext) - else: - print('Cannot embed meta-tags into given output extension') - -def metadata_mp3(music_file, meta_tags, output_ext): - artists = [] - for artist in meta_tags['artists']: - artists.append(artist['name']) - audiofile = EasyID3('Music/' + music_file + output_ext) - audiofile['artist'] = artists - audiofile['albumartist'] = meta_tags['artists'][0]['name'] - audiofile['album'] = meta_tags['album']['name'] - audiofile['title'] = meta_tags['name'] - audiofile['tracknumber'] = [meta_tags['track_number'], meta_tags['total_tracks']] - audiofile['discnumber'] = [meta_tags['disc_number'], 0] - audiofile['date'] = meta_tags['release_date'] - audiofile['originaldate'] = meta_tags['release_date'] - audiofile['media'] = meta_tags['type'] - audiofile['copyright'] = meta_tags['copyright'] - audiofile['author'] = meta_tags['artists'][0]['name'] - audiofile['lyricist'] = meta_tags['artists'][0]['name'] - audiofile['arranger'] = meta_tags['artists'][0]['name'] - audiofile['performer'] = meta_tags['artists'][0]['name'] - audiofile['encodedby'] = meta_tags['publisher'] - audiofile['isrc'] = meta_tags['external_ids']['isrc'] - audiofile['website'] = meta_tags['external_urls']['spotify'] - audiofile['length'] = str(meta_tags['duration_ms'] / 1000) - if meta_tags['genre']: - audiofile['genre'] = meta_tags['genre'] - audiofile.save(v2_version=3) - audiofile = ID3('Music/' + music_file + output_ext) - albumart = urllib2.urlopen(meta_tags['album']['images'][0]['url']) - audiofile["APIC"] = APIC(encoding=3, mime='image/jpeg', type=3, desc=u'Cover', data=albumart.read()) - albumart.close() - audiofile.save(v2_version=3) - -def metadata_m4a(music_file, meta_tags, output_ext): - # eyed serves only mp3 not aac so using mutagen - # Apple has specific tags - see mutagen docs - - # http://mutagen.readthedocs.io/en/latest/api/mp4.html - tags = {'album': '\xa9alb', - 'artist': '\xa9ART', - 'date': '\xa9day', - 'title': '\xa9nam', - 'originaldate': 'purd', - 'comment': '\xa9cmt', - 'group': '\xa9grp', - 'writer': '\xa9wrt', - 'genre': '\xa9gen', - 'tracknumber': 'trkn', - 'albumartist': 'aART', - 'disknumber': 'disk', - 'cpil': 'cpil', - 'albumart': 'covr', - 'copyright': 'cprt', - 'tempo': 'tmpo'} - - artists = [] - for artist in meta_tags['artists']: - artists.append(artist['name']) - audiofile = MP4('Music/' + music_file + output_ext) - audiofile[tags['artist']] = artists - audiofile[tags['albumartist']] = meta_tags['artists'][0]['name'] - audiofile[tags['album']] = meta_tags['album']['name'] - audiofile[tags['title']] = meta_tags['name'] - audiofile[tags['tracknumber']] = [(meta_tags['track_number'], meta_tags['total_tracks'])] - audiofile[tags['disknumber']] = [(meta_tags['disc_number'], 0)] - audiofile[tags['date']] = meta_tags['release_date'] - audiofile[tags['originaldate']] = meta_tags['release_date'] - audiofile[tags['copyright']] = meta_tags['copyright'] - if meta_tags['genre']: - audiofile[tags['genre']] = meta_tags['genre'] - albumart = urllib2.urlopen(meta_tags['album']['images'][0]['url']) - audiofile[tags['albumart']] = [ MP4Cover(albumart.read(), imageformat=MP4Cover.FORMAT_JPEG) ] - albumart.close() - audiofile.save() diff --git a/core/metadata.py b/core/metadata.py new file mode 100644 index 0000000..f5c77ad --- /dev/null +++ b/core/metadata.py @@ -0,0 +1,106 @@ +import urllib2 +from mutagen.easyid3 import EasyID3 +from mutagen.id3 import ID3, APIC +from mutagen.mp4 import MP4, MP4Cover + + +def compare_metadata(file, metadata): + try: + if file.endswith('.mp3'): + audiofile = EasyID3('Music/' + file) + already_tagged = audiofile['title'][0] == metadata['name'] + elif file.endswith('.m4a'): + tag = {'title': '\xa9nam'} + audiofile = MP4('Music/' + file) + already_tagged = audiofile[tags['title']] == metadata['name'] + except KeyError: + already_tagged = False + return already_tagged + +class embed_metadata(object): + + def __init__(self, music_file, meta_tags, output_ext): + + if meta_tags is None: + print('Could not find meta-tags') + elif output_ext == '.m4a': + print('Fixing meta-tags') + self.metadata_m4a(music_file, meta_tags, output_ext) + elif output_ext == '.mp3': + print('Fixing meta-tags') + self.metadata_mp3(music_file, meta_tags, output_ext) + else: + print('Cannot embed meta-tags into given output extension') + + def metadata_mp3(self, music_file, meta_tags, output_ext): + artists = [] + for artist in meta_tags['artists']: + artists.append(artist['name']) + audiofile = EasyID3('Music/' + music_file + output_ext) + audiofile['artist'] = artists + audiofile['albumartist'] = meta_tags['artists'][0]['name'] + audiofile['album'] = meta_tags['album']['name'] + audiofile['title'] = meta_tags['name'] + audiofile['tracknumber'] = [meta_tags['track_number'], meta_tags['total_tracks']] + audiofile['discnumber'] = [meta_tags['disc_number'], 0] + audiofile['date'] = meta_tags['release_date'] + audiofile['originaldate'] = meta_tags['release_date'] + audiofile['media'] = meta_tags['type'] + audiofile['copyright'] = meta_tags['copyright'] + audiofile['author'] = meta_tags['artists'][0]['name'] + audiofile['lyricist'] = meta_tags['artists'][0]['name'] + audiofile['arranger'] = meta_tags['artists'][0]['name'] + audiofile['performer'] = meta_tags['artists'][0]['name'] + audiofile['encodedby'] = meta_tags['publisher'] + audiofile['isrc'] = meta_tags['external_ids']['isrc'] + audiofile['website'] = meta_tags['external_urls']['spotify'] + audiofile['length'] = str(meta_tags['duration_ms'] / 1000) + if meta_tags['genre']: + audiofile['genre'] = meta_tags['genre'] + audiofile.save(v2_version=3) + audiofile = ID3('Music/' + music_file + output_ext) + albumart = urllib2.urlopen(meta_tags['album']['images'][0]['url']) + audiofile["APIC"] = APIC(encoding=3, mime='image/jpeg', type=3, desc=u'Cover', data=albumart.read()) + albumart.close() + audiofile.save(v2_version=3) + + def metadata_m4a(self, music_file, meta_tags, output_ext): + # eyed serves only mp3 not aac so using mutagen + # Apple has specific tags - see mutagen docs - + # http://mutagen.readthedocs.io/en/latest/api/mp4.html + tags = {'album': '\xa9alb', + 'artist': '\xa9ART', + 'date': '\xa9day', + 'title': '\xa9nam', + 'originaldate': 'purd', + 'comment': '\xa9cmt', + 'group': '\xa9grp', + 'writer': '\xa9wrt', + 'genre': '\xa9gen', + 'tracknumber': 'trkn', + 'albumartist': 'aART', + 'disknumber': 'disk', + 'cpil': 'cpil', + 'albumart': 'covr', + 'copyright': 'cprt', + 'tempo': 'tmpo'} + + artists = [] + for artist in meta_tags['artists']: + artists.append(artist['name']) + audiofile = MP4('Music/' + music_file + output_ext) + audiofile[tags['artist']] = artists + audiofile[tags['albumartist']] = meta_tags['artists'][0]['name'] + audiofile[tags['album']] = meta_tags['album']['name'] + audiofile[tags['title']] = meta_tags['name'] + audiofile[tags['tracknumber']] = [(meta_tags['track_number'], meta_tags['total_tracks'])] + audiofile[tags['disknumber']] = [(meta_tags['disc_number'], 0)] + audiofile[tags['date']] = meta_tags['release_date'] + audiofile[tags['originaldate']] = meta_tags['release_date'] + audiofile[tags['copyright']] = meta_tags['copyright'] + if meta_tags['genre']: + audiofile[tags['genre']] = meta_tags['genre'] + albumart = urllib2.urlopen(meta_tags['album']['images'][0]['url']) + audiofile[tags['albumart']] = [ MP4Cover(albumart.read(), imageformat=MP4Cover.FORMAT_JPEG) ] + albumart.close() + audiofile.save() diff --git a/spotdl.py b/spotdl.py index e0ae31a..148cd03 100644 --- a/spotdl.py +++ b/spotdl.py @@ -1,10 +1,9 @@ #!/usr/bin/env python # -*- coding: UTF-8 -*- -from core.embed_metadata import compare_metadata -from core.embed_metadata import embed_metadata -from core.embed_metadata import metadata_mp3 -from core.embed_metadata import metadata_m4a +#from core.metadata import embed_metadata +#from core.metadata import compare_metadata +from core import metadata from core.misc import input_link from core.misc import trim_song from core.misc import get_arguments @@ -235,15 +234,17 @@ def check_exists(music_file, raw_song, islist): if file.startswith(generate_filename(music_file)): - already_tagged = compare_metadata(file, generate_metadata(raw_song)) + already_tagged = metadata.compare_metadata(file, generate_metadata(raw_song)) if is_spotify(raw_song) and not already_tagged: os.remove("Music/" + file) return False + if islist: return True else: prompt = raw_input('Song with same name has already been downloaded. Re-download? (y/n): ').lower() + if prompt == "y": os.remove("Music/" + file) return False @@ -251,8 +252,8 @@ def check_exists(music_file, raw_song, islist): return True def grab_list(file): - lines = open(file, 'r').read() - lines = lines.splitlines() + with open(file, 'r') as listed: + lines = (listed.read()).splitlines() # Ignore blank lines in file (if any) try: lines.remove('') @@ -301,7 +302,7 @@ def grab_single(raw_song, number=None): convert_song(music_file) meta_tags = generate_metadata(raw_song) if not args.no_metadata: - embed_metadata(music_file, meta_tags, args.output_ext) + metadata.embed_metadata(music_file, meta_tags, args.output_ext) if __name__ == '__main__':