mirror of
https://github.com/KevinMidboe/spotify-downloader.git
synced 2025-10-29 18:00:15 +00:00
Switch to class for embedding metadata
This commit is contained in:
@@ -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()
|
||||
106
core/metadata.py
Normal file
106
core/metadata.py
Normal file
@@ -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()
|
||||
17
spotdl.py
17
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__':
|
||||
|
||||
|
||||
Reference in New Issue
Block a user