From 98114feca634a93a00d735973009694fe0ee35af Mon Sep 17 00:00:00 2001 From: Jali Date: Sun, 20 Mar 2022 20:54:54 +0100 Subject: [PATCH] Add tagging function for mp3 files --- scraper.py | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/scraper.py b/scraper.py index 35227d5..bcb83aa 100755 --- a/scraper.py +++ b/scraper.py @@ -2,6 +2,10 @@ # ex: set filetype=python import argparse +from mutagen.mp3 import MP3 +from mutagen.easyid3 import EasyID3 +import mutagen.id3 +from mutagen.id3 import ID3, TIT2, TIT3, TALB, TRCK, TYER import os from shutil importy copyfile import xml.etree.cElementTree as xml @@ -17,6 +21,7 @@ class Track(): for k, v in zip(it, it): setattr(self, k.text.replace(' ', ''), v.text) + def parseXml(xml_file): """ Parses an xml file and returns the DOM tree. @@ -28,7 +33,7 @@ def parseXml(xml_file): tracks.append(Track(t)) return tracks -def copy_file(track, targetFolder): +def copy_file(track: Track, targetFolder) -> str: """ Copies a track from its source to the destination folder """ @@ -41,6 +46,33 @@ def copy_file(track, targetFolder): print('File {0} not found.') return dst +def tag_file(track: Track, file_name: str): + """ + Adds ID3 tags to a file. + """ + if not file_name.endswith('.mp3'): + print('Skipping file {0}. It\'s not an mp3 file.'.format(file_name)) + return + + print('Tagging file {0}'.format(file_name)) + mp3file = MP3(file_name, ID3=EasyID3) + if hasattr(track,'Album'): mp3file['album'] = track.Album + if hasattr(track,'BPM'): mp3file['bpm'] = track.BPM + if hasattr(track,'Compilation'): mp3file['compilation'] = 'true' + if hasattr(track,'Composer'): mp3file['composer'] = track.Composer + if hasattr(track,'TotalTime'): mp3file['length'] = track.TotalTime + if hasattr(track,'Name'): mp3file['title'] = track.Name + if hasattr(track,'Artist'): mp3file['artist'] = track.Artist + if hasattr(track,'AlbumArtist'): mp3file['albumartist'] = track.AlbumArtist + if hasattr(track,'DiscNumber'): mp3file['discnumber'] = track.DiscNumber + if hasattr(track,'TrackNumber'): + if hasattr(track,'TrackCount'): + mp3file['tracknumber'] = '{0}/{1}'.format(track.TrackNumber, track.TrackCount) + else: + mp3file['tracknumber'] = track.TrackNumber + if hasattr(track,'Genre'): mp3file['genre'] = track.Genre + mp3file.save() + def main(): """ @@ -63,6 +95,7 @@ def main(): for t in tracks: new_file = copy_file(t, args.target) + tag_file(t, new_file) if __name__ == "__main__": main()