diff --git a/README.md b/README.md index 63d5698..01df802 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# music-downloader +# A Music-Downloader with CLI This programm will first get the metadata of various songs from metadata provider like musicbrainz, and then search for download links on pages like bandcamp. Then it will download the song and edit the metadata according. ## Metadata @@ -55,6 +55,7 @@ Those Tags are for the musicplayer to not sort for Example the albums of a band This is the **international standart release code**. With this a track can be identified 100% percicely all of the time, if it is known and the website has a search api for that. Obviously this will get important later. +--- ## Download @@ -89,3 +90,16 @@ This is a shortened example for the response the api gives. The results are very - If they match get the download links and cache them. ### Youtube + +Herte the **isrc** plays a huge role. You probaply know it, when you search on youtube for a song, and the music videos has a long intro or the first result is a live version. I don't want those in my music collection, only if the tracks are like this in the official release. Well how can you get around that? + +Turns out if you search for the **isrc** on youtube the results contain the music, like it is on the official release and some japanese meme videos. The tracks I wan't just have the title of the released track, so one can just compare those two. + +For searching, as well as for downloading I use the programm `youtube-dl`, which also has a programming interface for python. + +There are two bottlenecks with this approach though: +1. `youtube-dl` is just slow. Actually it has to be, to not get blocked by youtube. +2. Ofthen musicbrainz just doesn't give the isrc for some songs. + +**TODO** +- look at how the isrc id derived an try to generate it for the tracks without directly getting it from mb. diff --git a/requirements.txt b/requirements.txt index 823a91c..0516df7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,4 +3,6 @@ pandas~=1.5.0 mutagen~=1.46.0 musicbrainzngs~=0.7.1 jellyfish~=0.9.0 -pydub~=0.25.1 \ No newline at end of file +pydub~=0.25.1 +youtube_dl +beautifulsoup4~=4.11.1 \ No newline at end of file diff --git a/src/__pycache__/phonetic_compares.cpython-310.pyc b/src/__pycache__/phonetic_compares.cpython-310.pyc new file mode 100644 index 0000000..4f3dc70 Binary files /dev/null and b/src/__pycache__/phonetic_compares.cpython-310.pyc differ diff --git a/src/download.py b/src/download.py index dc4e053..08a66ee 100644 --- a/src/download.py +++ b/src/download.py @@ -1,3 +1,4 @@ +import mutagen.id3 import requests import os.path import pandas as pd @@ -13,69 +14,42 @@ import youtube_music https://en.wikipedia.org/wiki/ID3 https://mutagen.readthedocs.io/en/latest/user/id3.html ->>> from mutagen.easyid3 import EasyID3 ->>> print(EasyID3.valid_keys.keys()) -dict_keys( - [ - 'album', - 'bpm', - 'compilation', - 'composer', - 'copyright', - 'encodedby', - 'lyricist', - 'length', - 'media', - 'mood', - 'grouping', - 'title', - 'version', - 'artist', - 'albumartist', - 'conductor', - 'arranger', - 'discnumber', - 'organization', - 'tracknumber', - 'author', - 'albumartistsort', - 'albumsort', - 'composersort', - 'artistsort', - 'titlesort', - 'isrc', - 'discsubtitle', - 'language', - 'genre', - 'date', - 'originaldate', - 'performer:*', - 'musicbrainz_trackid', - 'website', - 'replaygain_*_gain', - 'replaygain_*_peak', - 'musicbrainz_artistid', - 'musicbrainz_albumid', - 'musicbrainz_albumartistid', - 'musicbrainz_trmid', - 'musicip_puid', - 'musicip_fingerprint', - 'musicbrainz_albumstatus', - 'musicbrainz_albumtype', <---------- - 'releasecountry', - 'musicbrainz_discid', - 'asin', - 'performer', - 'barcode', - 'catalognumber', - 'musicbrainz_releasetrackid', - 'musicbrainz_releasegroupid', - 'musicbrainz_workid', - 'acoustid_fingerprint', - 'acoustid_id' - ]) +# to get all valid keys +from mutagen.easyid3 import EasyID3 +print(EasyID3.valid_keys.keys()) """ + +def write_metadata(row, file_path): + # only convert the file to the proper format if mutagen doesn't work with it due to time + try: + audiofile = EasyID3(file_path) + except mutagen.id3.ID3NoHeaderError: + AudioSegment.from_file(file_path).export(file_path, format="mp3") + audiofile = EasyID3(file_path) + + valid_keys = list(EasyID3.valid_keys.keys()) + + for key in list(row.keys()): + if type(row[key]) == list or key in valid_keys and not pd.isna(row[key]): + # print(key) + if type(row[key]) == int or type(row[key]) == float: + row[key] = str(row[key]) + audiofile[key] = row[key] + + logging.info("saving") + audiofile.save(file_path, v1=2) + + +def path_stuff(path: str, file_: str): + # returns true if it shouldn't be downloaded + if os.path.exists(file_): + logging.info(f"'{file_}' does already exist, thus not downloading.") + return True + os.makedirs(path, exist_ok=True) + return False + + class Download: def __init__(self, session: requests.Session = requests.Session(), file: str = ".cache3.csv", temp: str = "temp", base_path: str = ""): @@ -94,8 +68,8 @@ class Download: row['file'] = os.path.join(base_path, row['file']) row['path'] = os.path.join(base_path, row['path']) - if self.path_stuff(row['path'], row['file']): - self.write_metadata(row, row['file']) + if path_stuff(row['path'], row['file']): + write_metadata(row, row['file']) continue src = row['src'] @@ -103,32 +77,7 @@ class Download: musify.download(row) elif src == 'youtube': youtube_music.download(row) - self.write_metadata(row, row['file']) - - def path_stuff(self, path: str, file_: str): - # returns true if it shouldn't be downloaded - if os.path.exists(file_): - logging.info(f"'{file_}' does already exist, thus not downloading.") - return True - os.makedirs(path, exist_ok=True) - return False - - def write_metadata(self, row, filePath): - AudioSegment.from_file(filePath).export(filePath, format="mp3") - - audiofile = EasyID3(filePath) - - valid_keys = list(EasyID3.valid_keys.keys()) - - for key in list(row.keys()): - if type(row[key]) == list or key in valid_keys and not pd.isna(row[key]): - # print(key) - if type(row[key]) == int or type(row[key]) == float: - row[key] = str(row[key]) - audiofile[key] = row[key] - - print("saving") - audiofile.save(filePath, v1=2) + write_metadata(row, row['file']) if __name__ == "__main__": diff --git a/src/download_links.py b/src/download_links.py index 06c048a..7a272e9 100644 --- a/src/download_links.py +++ b/src/download_links.py @@ -31,6 +31,12 @@ class Download: self.add_url(youtube_url, 'youtube', dict(row)) continue + # check musify again, but with a diffrent methode that takes longer + musify_url = musify.get_musify_url_slow(row) + if musify_url is not None: + self.add_url(musify_url, 'musify', dict(row)) + continue + logging.warning(f"Didn't find any sources for {row['title']}") self.dump_urls(file) diff --git a/src/main.py b/src/main.py index 87264dc..c92a055 100644 --- a/src/main.py +++ b/src/main.py @@ -7,17 +7,28 @@ import logging import requests import os + TEMP = "temp" STEP_ONE_CACHE = ".cache1.csv" STEP_TWO_CACHE = ".cache2.csv" STEP_THREE_CACHE = ".cache3.csv" +NOT_A_GENRE = ".", "..", "misc_scripts", "Music", "script", ".git", ".idea" MUSIC_DIR = os.path.expanduser('~/Music') TOR = False logging.basicConfig(level=logging.INFO) +def get_existing_genre(): + valid_directories = [] + for elem in os.listdir(MUSIC_DIR): + if elem not in NOT_A_GENRE: + valid_directories.append(elem) + + return valid_directories + + def search_for_metadata(query: str): search = metadata.Search(query=query, temp=TEMP) @@ -41,6 +52,24 @@ def search_for_metadata(query: str): continue +def get_genre(): + existing_genres = get_existing_genre() + print("printing available genres:") + for i, genre_option in enumerate(existing_genres): + print(f"{i}: {genre_option}") + + genre = input("Input the ID for an existing genre or text for a new one: ") + + if genre.isdigit(): + genre_id = int(genre) + if genre_id >= len(existing_genres): + logging.warning("An invalid genre id has been given") + return get_genre() + return existing_genres[genre_id] + + return genre + + def cli(start_at: int = 0): session = requests.Session() if TOR: @@ -50,7 +79,8 @@ def cli(start_at: int = 0): } if start_at <= 2: - genre = input("genre to download to: ") + genre = get_genre() + logging.info(f"{genre} has been set as genre.") if start_at <= 0: search = search_for_metadata(query=input("initial query: ")) diff --git a/src/metadata.py b/src/metadata.py index 763aaa3..8a6d24c 100644 --- a/src/metadata.py +++ b/src/metadata.py @@ -10,16 +10,18 @@ musicbrainzngs.set_useragent("metadata receiver", "0.1", "https://github.com/HeI KNOWN_KIND_OF_OPTIONS = ["artist", "release", "track"] + def output(msg: str): print(msg) -def get_elem_from_obj(current_object, keys: list, after_process=lambda x: x): + +def get_elem_from_obj(current_object, keys: list, after_process=lambda x: x, return_if_none=None): current_object = current_object for key in keys: if key in current_object or (type(key) == int and key < len(current_object)): current_object = current_object[key] else: - return None + return return_if_none return after_process(current_object) @@ -47,6 +49,7 @@ class Search: metadata_list = [] if kind == "artist": + metadata_list = self.download_artist(mb_id) elif kind == "release": metadata_list = self.download_release(mb_id) @@ -70,7 +73,6 @@ class Search: for i, release in enumerate(result["artist"]["release-list"]): metadata_list.extend(self.download_release(release["id"], i)) - return metadata_list def download_release(self, mb_id, album_sort: int = None): @@ -80,6 +82,7 @@ class Search: label-rels, place-rels, event-rels, recording-rels, release-rels, release-group-rels, series-rels, url-rels, work-rels, instrument-rels """ + def get_additional_artist_info(mb_id_): r = musicbrainzngs.get_artist_by_id(mb_id_, includes=["releases"]) @@ -91,10 +94,12 @@ class Search: break return album_sort + result = musicbrainzngs.get_release_by_id(mb_id, includes=["artists", "recordings", 'release-groups']) if album_sort is None: - album_sort = get_additional_artist_info(get_elem_from_obj(result, ['release', 'artist-credit', 0, 'artist', 'id'])) + album_sort = get_additional_artist_info( + get_elem_from_obj(result, ['release', 'artist-credit', 0, 'artist', 'id'])) release_type = get_elem_from_obj(result, ['release', 'release-group', 'type']) tracklist_metadata = [] @@ -107,11 +112,15 @@ class Search: track_id = track["recording"]["id"] this_track = track["position"] - tracklist_metadata.extend(self.download_track(track_id, is_various_artist=is_various_artist, track=this_track, total_tracks=track_count, album_sort=album_sort, album_type=release_type)) - + tracklist_metadata.extend( + self.download_track(track_id, is_various_artist=is_various_artist, track=this_track, + total_tracks=track_count, album_sort=album_sort, album_type=release_type, + release_data=result['release'])) + return tracklist_metadata - def download_track(self, mb_id, is_various_artist: bool = None, track: int = None, total_tracks: int = None, album_sort: int = None, album_type: str = None): + def download_track(self, mb_id, is_various_artist: bool = None, track: int = None, total_tracks: int = None, + album_sort: int = None, album_type: str = None, release_data: dict = None): """ TODO bpm its kind of possible via the AcousticBrainz API. however, the data may not be of very good @@ -159,27 +168,27 @@ class Search: recording-rels, release-rels, release-group-rels, series-rels, url-rels, work-rels, instrument-rels """ - result = musicbrainzngs.get_recording_by_id(mb_id, includes=["artists", "releases", "recording-rels", "isrcs", "work-level-rels"]) + result = musicbrainzngs.get_recording_by_id(mb_id, includes=["artists", "releases", "recording-rels", "isrcs", + "work-level-rels"]) recording_data = result['recording'] isrc = get_elem_from_obj(recording_data, ['isrc-list', 0]) - release_data = recording_data['release-list'][0] + if release_data is None: + # choosing the last release, because it is the least likely one to be a single + release_data = recording_data['release-list'][-1] mb_release_id = release_data['id'] title = recording_data['title'] - - + artist = [] mb_artist_ids = [] for artist_ in recording_data['artist-credit']: - name_ = get_elem_from_obj(artist_, ['artist', 'name']) - if name_ is None: - continue - artist.append(name_) - mb_artist_ids.append(get_elem_from_obj(artist_, ['artist', 'id'])) - # artist = [get_elem_from_obj(artist_, ['artist', 'name']) for artist_ in recording_data['artist-credit']] - # mb_artist_ids = [get_elem_from_obj(artist_, ['artist', 'id']) for artist_ in recording_data['artist-credit']] - + name_ = get_elem_from_obj(artist_, ['artist', 'name']) + if name_ is None: + continue + artist.append(name_) + mb_artist_ids.append(get_elem_from_obj(artist_, ['artist', 'id'])) + def get_additional_artist_info(mb_id_): r = musicbrainzngs.get_artist_by_id(mb_id_, includes=["releases"]) @@ -193,7 +202,8 @@ class Search: return album_sort def get_additional_release_info(mb_id_): - r = musicbrainzngs.get_release_by_id(mb_id_, includes=["artists", "recordings", "recording-rels", 'release-groups']) + r = musicbrainzngs.get_release_by_id(mb_id_, + includes=["artists", "recordings", "recording-rels", 'release-groups']) is_various_artist_ = len(r['release']['artist-credit']) > 1 tracklist = r['release']['medium-list'][0]['track-list'] track_count_ = len(tracklist) @@ -412,7 +422,8 @@ def interactive_demo(): search = Search(query=input("initial query: ")) print(search.options) while True: - input_ = input("d to download, q to quit, .. for previous options, . for current options, int for this element: ").lower() + input_ = input( + "d to download, q to quit, .. for previous options, . for current options, int for this element: ").lower() input_.strip() if input_ == "q": break @@ -435,9 +446,12 @@ if __name__ == "__main__": # automated_demo() search = Search(query="psychonaut 4") # search.download_release("27f00fb8-983c-4d5c-950f-51418aac55dc") + search.download_release("1aeb676f-e556-4b17-b45e-64ab69ef0375") # for track_ in search.download_artist("c0c720b5-012f-4204-a472-981403f37b12"): # print(track_) - res = search.download_track("83a30323-aee1-401a-b767-b3c1bdd026c0") + # res = search.download_track("83a30323-aee1-401a-b767-b3c1bdd026c0") + # res = search.download_track("5e1ee2c5-502c-44d3-b1bc-22803441d8c6") + res = search.download_track("86b43bec-eea6-40ae-8624-c1e404204ba1") # res = search.download_track("5cc28584-10c6-40e2-b6d4-6891e7e7c575") for key in res[0]: diff --git a/src/musify.py b/src/musify.py index 2619e93..69b9956 100644 --- a/src/musify.py +++ b/src/musify.py @@ -1,5 +1,8 @@ import logging import requests +import bs4 + +import phonetic_compares session = requests.Session() session.headers = { @@ -7,6 +10,7 @@ session.headers = { "Referer": "https://musify.club/" } + def get_musify_url(row): title = row['title'] artists = row['artist'] @@ -22,6 +26,7 @@ def get_musify_url(row): return None + def get_download_link(default_url): # https://musify.club/track/dl/18567672/rauw-alejandro-te-felicito-feat-shakira.mp3 # /track/sundenklang-wenn-mein-herz-schreit-3883217' @@ -34,6 +39,10 @@ def get_download_link(default_url): return f"https://musify.club/track/dl/{musify_id}/{musify_name}.mp3" +<<<<<<< HEAD +======= + +>>>>>>> e923dcdaf208a95492af3afaa9e49fbbcfb9520c def download_from_musify(file, url): logging.info(f"downloading: '{url}'") r = session.get(url) @@ -46,7 +55,66 @@ def download_from_musify(file, url): mp3_file.write(r.content) logging.info("finished") + def download(row): url = row['url'] file_ = row['file'] return download_from_musify(file_, url) + + +def search_for_track(row): + track = row.title + artist = row.artist + + url = f"https://musify.club/search?searchText={track}" + r = session.get(url) + if r.status_code != 200: + raise ConnectionError(f"{r.url} returned {r.status_code}:\n{r.content}") + soup = bs4.BeautifulSoup(r.content, features="html.parser") + tracklist_container_soup = soup.find_all("div", {"class": "playlist"}) + if len(tracklist_container_soup) != 1: + raise Exception("Connfusion Error. HTML Layout of https://musify.club changed.") + tracklist_container_soup = tracklist_container_soup[0] + + tracklist_soup = tracklist_container_soup.find_all("div", {"class": "playlist__details"}) + + def parse_track_soup(_track_soup): + anchor_soups = _track_soup.find_all("a") + band_name = anchor_soups[0].text.strip() + title = anchor_soups[1].text.strip() + url_ = anchor_soups[1]['href'] + return band_name, title, url_ + + for track_soup in tracklist_soup: + band_option, title_option, track_url = parse_track_soup(track_soup) + + title_match, title_distance = phonetic_compares.match_titles(track, title_option) + band_match, band_distance = phonetic_compares.match_artists(artist, band_option) + + print(track, title_option, title_match, title_distance) + print(artist, band_option, band_match, band_distance) + + if not title_match and not band_match: + return get_download_link(track_url) + + return None + + +def get_musify_url_slow(row): + print(row) + result = search_for_track(row) + if result is not None: + return result + + +if __name__ == "__main__": + import pandas as pd + import json + + df = pd.read_csv("../temp/.cache1.csv") + print(df) + + for idx, row in df.iterrows(): + row['artist'] = json.loads(row['artist'].replace("'", '"')) + print("-" * 200) + print(get_musify_url_slow(row)) diff --git a/src/phonetic_compares.py b/src/phonetic_compares.py new file mode 100644 index 0000000..54f00e8 --- /dev/null +++ b/src/phonetic_compares.py @@ -0,0 +1,23 @@ +import jellyfish + +TITLE_THRESHOLD_LEVENSHTEIN = 2 + + +def match_titles(title_1: str, title_2: str) -> (bool, int): + distance = jellyfish.levenshtein_distance(title_1, title_2) + return distance > 1, distance + + +def match_artists(artist_1, artist_2: str) -> (bool, int): + if type(artist_1) == list: + distances = [] + + for artist_1_ in artist_1: + print(artist_1_) + match, distance = match_titles(artist_1_, artist_2) + if not match: + return match, distance + + distances.append(distance) + return True, min(distances) + return match_titles(artist_1, artist_2) diff --git a/src/temp/.cache1.csv b/src/temp/.cache1.csv index 05e38b7..1a8c616 100644 --- a/src/temp/.cache1.csv +++ b/src/temp/.cache1.csv @@ -1,14 +1,19 @@ ,id,album,title,artist,album_artist,tracknumber,albumsort,titlesort,isrc,date,year,musicbrainz_artistid,musicbrainz_albumid,musicbrainz_albumartistid,musicbrainz_albumstatus,total_tracks,language,musicbrainz_albumtype,compilation,releasecountry,barcode -0,5e1ee2c5-502c-44d3-b1bc-22803441d8c6,Abgesägte Schrotflinte,Abgesägte Schrotflinte,['Crystal F'],Crystal F,1,0,1,DEVY82000223,2021-03-12,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,ca933487-97ff-4a44-ab6f-9e4fcd26ceda,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4062851774871 -1,71e4dd64-6479-45be-b9a0-37d4edc364fa,Das Leben danach,Schockschwerenot,['Crystal F'],Crystal F,2,0,2,DEVY82000317,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133 -2,c6b0ce24-b75b-40ad-a12a-1fa8a412dc14,Genug,Genug,['Crystal F'],Crystal F,3,0,3,DEVY82000308,2021-04-30,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,e9043dfa-189e-4caa-94c8-7e329d009389,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4062851604161 -3,d01df009-40cf-4bae-8ab4-19e70c552feb,Du willst mit mir gehen,Du willst mit mir gehen,['Crystal F'],Crystal F,4,0,4,DEVY82000296,2021-04-02,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,2659e838-ac3b-425b-935d-7cb93043bb3f,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4062851783668 -4,5a3d0f0f-d847-4678-b14d-f0875339ec13,Das Leben danach,Komm wir tun mir weh,['Crystal F'],Crystal F,5,0,5,DEVY82000318,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133 -5,8426e0e1-e14b-48ec-8e53-950fdf3b8754,Das Leben danach,S4distentreff 4,"['Crystal F', 'MXP', 'Dollar John', 'G-Ko']",Crystal F,6,0,6,DEVY82000319,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133 -6,1543f558-4d54-4047-a6aa-affd02e89ab4,Das Leben danach,Stehen geblieben,['Crystal F'],Crystal F,7,0,7,DEVY82000320,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133 -7,ccf6d043-7157-492b-bca0-78a24c0c8372,Das Leben danach,"Blau, grün, gelb","['Crystal F', 'Ruffiction']",Crystal F,8,0,8,DEVY82000321,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133 -8,41ad47ab-0337-4fcc-b369-5a4b1e12dc3c,Das Leben danach,Was fühlst du noch,"['Crystal F', 'Zero/Zero', 'Nils Davis', 'Taha']",Crystal F,9,0,9,DEVY82000322,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133 -9,ed6cc3e1-d493-4a51-973c-3adc1a6ea978,Das Leben danach,Katzen,"['Crystal F', 'Kito', 'Kirby']",Crystal F,10,0,10,DEVY82000323,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133 -10,b49a466f-e77b-465d-9c01-06298efb0c9d,Das Leben danach,Wach sein,['Crystal F'],Crystal F,11,0,11,DEVY82000324,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133 -11,86b43bec-eea6-40ae-8624-c1e404204ba1,Das Leben danach,Rote Augen,['Crystal F'],Crystal F,12,0,12,DEVY82000325,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133 -12,2a3dc1ae-6752-420f-b1d3-ca9e26a15c48,Das Leben danach,Schlechtes Essen,['Crystal F'],Crystal F,13,0,13,DEVY82000326,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133 +0,755e2c25-2a88-4d87-a794-580dc4886ab9,Into Light's Graven Womb,Intro,['Nocturnal Triumph'],Nocturnal Triumph,1,0,1,,2016,2016,6bee5e73-5340-4514-90aa-22dad13c2206,f5910dba-3972-4250-956f-7cfa7cbd4cd1,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,, +1,f0d029c3-fcfa-4ae3-b05c-9900807c3bd6,Into Light's Graven Womb,The Key and the Stone,['Nocturnal Triumph'],Nocturnal Triumph,2,0,2,,2016,2016,6bee5e73-5340-4514-90aa-22dad13c2206,f5910dba-3972-4250-956f-7cfa7cbd4cd1,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,, +2,587999cf-d697-49e3-9c17-3d25c8d9acfe,Into Light's Graven Womb,Of Worship and Principle,['Nocturnal Triumph'],Nocturnal Triumph,3,0,3,,2016,2016,6bee5e73-5340-4514-90aa-22dad13c2206,f5910dba-3972-4250-956f-7cfa7cbd4cd1,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,, +3,f819f1f5-d3d6-4776-b56b-57b75d04844b,Into Light's Graven Womb,Into Light's Graven Womb,['Nocturnal Triumph'],Nocturnal Triumph,4,0,4,,2016,2016,6bee5e73-5340-4514-90aa-22dad13c2206,f5910dba-3972-4250-956f-7cfa7cbd4cd1,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,, +4,66a00bfa-e1f0-467b-98f5-559e71538188,Into Light's Graven Womb,Desolate Chambers Echo,['Nocturnal Triumph'],Nocturnal Triumph,5,0,5,,2016,2016,6bee5e73-5340-4514-90aa-22dad13c2206,f5910dba-3972-4250-956f-7cfa7cbd4cd1,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,, +5,755e2c25-2a88-4d87-a794-580dc4886ab9,Into Light's Graven Womb,Intro,['Nocturnal Triumph'],Nocturnal Triumph,1,1,1,,2017-07-31,2017,6bee5e73-5340-4514-90aa-22dad13c2206,81fa66bc-425e-45c3-ad80-2a7624e380a4,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,XW, +6,f0d029c3-fcfa-4ae3-b05c-9900807c3bd6,Into Light's Graven Womb,The Key and the Stone,['Nocturnal Triumph'],Nocturnal Triumph,2,1,2,,2017-07-31,2017,6bee5e73-5340-4514-90aa-22dad13c2206,81fa66bc-425e-45c3-ad80-2a7624e380a4,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,XW, +7,587999cf-d697-49e3-9c17-3d25c8d9acfe,Into Light's Graven Womb,Of Worship and Principle,['Nocturnal Triumph'],Nocturnal Triumph,3,1,3,,2017-07-31,2017,6bee5e73-5340-4514-90aa-22dad13c2206,81fa66bc-425e-45c3-ad80-2a7624e380a4,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,XW, +8,f819f1f5-d3d6-4776-b56b-57b75d04844b,Into Light's Graven Womb,Into Light's Graven Womb,['Nocturnal Triumph'],Nocturnal Triumph,4,1,4,,2017-07-31,2017,6bee5e73-5340-4514-90aa-22dad13c2206,81fa66bc-425e-45c3-ad80-2a7624e380a4,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,XW, +9,66a00bfa-e1f0-467b-98f5-559e71538188,Into Light's Graven Womb,Desolate Chambers Echo,['Nocturnal Triumph'],Nocturnal Triumph,5,1,5,,2017-07-31,2017,6bee5e73-5340-4514-90aa-22dad13c2206,81fa66bc-425e-45c3-ad80-2a7624e380a4,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,XW, +10,de6095d0-40f8-4121-8ae9-7ca8332b0fc4,The Fangs of Miseries Past,The Fires of Tragedy,['Nocturnal Triumph'],Nocturnal Triumph,1,2,1,,2018,2018,6bee5e73-5340-4514-90aa-22dad13c2206,874bba46-d47f-4ef3-9960-9468c6dfa536,6bee5e73-5340-4514-90aa-22dad13c2206,Official,4,eng,Album,,, +11,4337fac9-ee73-4183-bd63-7d6b7c279e1f,The Fangs of Miseries Past,The Fangs of Miseries Past,['Nocturnal Triumph'],Nocturnal Triumph,2,2,2,,2018,2018,6bee5e73-5340-4514-90aa-22dad13c2206,874bba46-d47f-4ef3-9960-9468c6dfa536,6bee5e73-5340-4514-90aa-22dad13c2206,Official,4,eng,Album,,, +12,d9118f78-34bd-4c57-8df6-34ee2775a895,The Fangs of Miseries Past,A Moon Cloaked in Despair,['Nocturnal Triumph'],Nocturnal Triumph,3,2,3,,2018,2018,6bee5e73-5340-4514-90aa-22dad13c2206,874bba46-d47f-4ef3-9960-9468c6dfa536,6bee5e73-5340-4514-90aa-22dad13c2206,Official,4,eng,Album,,, +13,2e6cfa77-ee95-4c76-a802-06aa8cf8364a,The Fangs of Miseries Past,Towards Rebirth and Demise,['Nocturnal Triumph'],Nocturnal Triumph,4,2,4,,2018,2018,6bee5e73-5340-4514-90aa-22dad13c2206,874bba46-d47f-4ef3-9960-9468c6dfa536,6bee5e73-5340-4514-90aa-22dad13c2206,Official,4,eng,Album,,, +14,e5eda55f-6048-4f8c-8f0f-463af2b5b9f7,Nocturnal Triumph,The Hammer of Immateriality,['Nocturnal Triumph'],Nocturnal Triumph,1,3,1,,2022-01-12,2022,6bee5e73-5340-4514-90aa-22dad13c2206,0b533827-8d1d-4881-a9bb-84cd3054d321,6bee5e73-5340-4514-90aa-22dad13c2206,Official,4,eng,Album,,XW, +15,4d19329f-3e48-440b-85f4-293bfc2780b7,Nocturnal Triumph,Beneath the Veins of God,['Nocturnal Triumph'],Nocturnal Triumph,2,3,2,,2022-01-12,2022,6bee5e73-5340-4514-90aa-22dad13c2206,0b533827-8d1d-4881-a9bb-84cd3054d321,6bee5e73-5340-4514-90aa-22dad13c2206,Official,4,eng,Album,,XW, +16,7a601bea-f05c-486b-8ce1-0bedd6099b2c,Nocturnal Triumph,Where He Slumbers in Wait,['Nocturnal Triumph'],Nocturnal Triumph,3,3,3,,2022-01-12,2022,6bee5e73-5340-4514-90aa-22dad13c2206,0b533827-8d1d-4881-a9bb-84cd3054d321,6bee5e73-5340-4514-90aa-22dad13c2206,Official,4,eng,Album,,XW, +17,79d7db2c-6ef7-4525-9eab-c47f3a074d1a,Nocturnal Triumph,Torn by the Weight of Reversal,['Nocturnal Triumph'],Nocturnal Triumph,4,3,4,,2022-01-12,2022,6bee5e73-5340-4514-90aa-22dad13c2206,0b533827-8d1d-4881-a9bb-84cd3054d321,6bee5e73-5340-4514-90aa-22dad13c2206,Official,4,eng,Album,,XW, diff --git a/src/temp/.cache2.csv b/src/temp/.cache2.csv index 46c02c7..6c1cc9c 100644 --- a/src/temp/.cache2.csv +++ b/src/temp/.cache2.csv @@ -1,14 +1,13 @@ ,id,album,title,artist,album_artist,tracknumber,albumsort,titlesort,isrc,date,year,musicbrainz_artistid,musicbrainz_albumid,musicbrainz_albumartistid,musicbrainz_albumstatus,total_tracks,language,musicbrainz_albumtype,compilation,releasecountry,barcode,url,src -0,5e1ee2c5-502c-44d3-b1bc-22803441d8c6,Abgesägte Schrotflinte,Abgesägte Schrotflinte,['Crystal F'],Crystal F,1,0,1,DEVY82000223,2021-03-12,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,ca933487-97ff-4a44-ab6f-9e4fcd26ceda,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4062851774871,https://www.youtube.com/watch?v=QLvZVY_iiUc,youtube -1,71e4dd64-6479-45be-b9a0-37d4edc364fa,Das Leben danach,Schockschwerenot,['Crystal F'],Crystal F,2,0,2,DEVY82000317,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=VJESTJWnRhU,youtube -2,c6b0ce24-b75b-40ad-a12a-1fa8a412dc14,Genug,Genug,['Crystal F'],Crystal F,3,0,3,DEVY82000308,2021-04-30,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,e9043dfa-189e-4caa-94c8-7e329d009389,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4062851604161,https://www.youtube.com/watch?v=C0-n46T22vo,youtube -3,d01df009-40cf-4bae-8ab4-19e70c552feb,Du willst mit mir gehen,Du willst mit mir gehen,['Crystal F'],Crystal F,4,0,4,DEVY82000296,2021-04-02,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,2659e838-ac3b-425b-935d-7cb93043bb3f,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4062851783668,https://www.youtube.com/watch?v=D0rYWsUgDuQ,youtube -4,5a3d0f0f-d847-4678-b14d-f0875339ec13,Das Leben danach,Komm wir tun mir weh,['Crystal F'],Crystal F,5,0,5,DEVY82000318,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=3Hq0_qc3zqo,youtube -5,8426e0e1-e14b-48ec-8e53-950fdf3b8754,Das Leben danach,S4distentreff 4,"['Crystal F', 'MXP', 'Dollar John', 'G-Ko']",Crystal F,6,0,6,DEVY82000319,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=sFmYIN0JNec,youtube -6,1543f558-4d54-4047-a6aa-affd02e89ab4,Das Leben danach,Stehen geblieben,['Crystal F'],Crystal F,7,0,7,DEVY82000320,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=V65bn2jN4ZE,youtube -7,ccf6d043-7157-492b-bca0-78a24c0c8372,Das Leben danach,"Blau, grün, gelb","['Crystal F', 'Ruffiction']",Crystal F,8,0,8,DEVY82000321,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=Mo7hZ984faU,youtube -8,41ad47ab-0337-4fcc-b369-5a4b1e12dc3c,Das Leben danach,Was fühlst du noch,"['Crystal F', 'Zero/Zero', 'Nils Davis', 'Taha']",Crystal F,9,0,9,DEVY82000322,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=T15QiksB7do,youtube -9,ed6cc3e1-d493-4a51-973c-3adc1a6ea978,Das Leben danach,Katzen,"['Crystal F', 'Kito', 'Kirby']",Crystal F,10,0,10,DEVY82000323,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=eKCpu74GYxs,youtube -10,b49a466f-e77b-465d-9c01-06298efb0c9d,Das Leben danach,Wach sein,['Crystal F'],Crystal F,11,0,11,DEVY82000324,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=dboTFFBUPW0,youtube -11,86b43bec-eea6-40ae-8624-c1e404204ba1,Das Leben danach,Rote Augen,['Crystal F'],Crystal F,12,0,12,DEVY82000325,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=zvYHKYz6AGI,youtube -12,2a3dc1ae-6752-420f-b1d3-ca9e26a15c48,Das Leben danach,Schlechtes Essen,['Crystal F'],Crystal F,13,0,13,DEVY82000326,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=XAfpge1FxLY,youtube +0,f0d029c3-fcfa-4ae3-b05c-9900807c3bd6,Into Light's Graven Womb,The Key and the Stone,['Nocturnal Triumph'],Nocturnal Triumph,2,0,2,,2016,2016,6bee5e73-5340-4514-90aa-22dad13c2206,f5910dba-3972-4250-956f-7cfa7cbd4cd1,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,,,https://musify.club/track/dl/10342760/nocturnal-triumph-the-key-and-the-stone.mp3,musify +1,587999cf-d697-49e3-9c17-3d25c8d9acfe,Into Light's Graven Womb,Of Worship and Principle,['Nocturnal Triumph'],Nocturnal Triumph,3,0,3,,2016,2016,6bee5e73-5340-4514-90aa-22dad13c2206,f5910dba-3972-4250-956f-7cfa7cbd4cd1,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,,,https://musify.club/track/dl/10342761/nocturnal-triumph-of-worship-and-principle.mp3,musify +2,f819f1f5-d3d6-4776-b56b-57b75d04844b,Into Light's Graven Womb,Into Light's Graven Womb,['Nocturnal Triumph'],Nocturnal Triumph,4,0,4,,2016,2016,6bee5e73-5340-4514-90aa-22dad13c2206,f5910dba-3972-4250-956f-7cfa7cbd4cd1,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,,,https://musify.club/track/dl/10342762/nocturnal-triumph-into-lights-graven-womb.mp3,musify +3,66a00bfa-e1f0-467b-98f5-559e71538188,Into Light's Graven Womb,Desolate Chambers Echo,['Nocturnal Triumph'],Nocturnal Triumph,5,0,5,,2016,2016,6bee5e73-5340-4514-90aa-22dad13c2206,f5910dba-3972-4250-956f-7cfa7cbd4cd1,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,,,https://musify.club/track/dl/10342763/nocturnal-triumph-desolate-chambers-echo.mp3,musify +4,f0d029c3-fcfa-4ae3-b05c-9900807c3bd6,Into Light's Graven Womb,The Key and the Stone,['Nocturnal Triumph'],Nocturnal Triumph,2,1,2,,2017-07-31,2017,6bee5e73-5340-4514-90aa-22dad13c2206,81fa66bc-425e-45c3-ad80-2a7624e380a4,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,XW,,https://musify.club/track/dl/10342760/nocturnal-triumph-the-key-and-the-stone.mp3,musify +5,587999cf-d697-49e3-9c17-3d25c8d9acfe,Into Light's Graven Womb,Of Worship and Principle,['Nocturnal Triumph'],Nocturnal Triumph,3,1,3,,2017-07-31,2017,6bee5e73-5340-4514-90aa-22dad13c2206,81fa66bc-425e-45c3-ad80-2a7624e380a4,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,XW,,https://musify.club/track/dl/10342761/nocturnal-triumph-of-worship-and-principle.mp3,musify +6,f819f1f5-d3d6-4776-b56b-57b75d04844b,Into Light's Graven Womb,Into Light's Graven Womb,['Nocturnal Triumph'],Nocturnal Triumph,4,1,4,,2017-07-31,2017,6bee5e73-5340-4514-90aa-22dad13c2206,81fa66bc-425e-45c3-ad80-2a7624e380a4,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,XW,,https://musify.club/track/dl/10342762/nocturnal-triumph-into-lights-graven-womb.mp3,musify +7,66a00bfa-e1f0-467b-98f5-559e71538188,Into Light's Graven Womb,Desolate Chambers Echo,['Nocturnal Triumph'],Nocturnal Triumph,5,1,5,,2017-07-31,2017,6bee5e73-5340-4514-90aa-22dad13c2206,81fa66bc-425e-45c3-ad80-2a7624e380a4,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,XW,,https://musify.club/track/dl/10342763/nocturnal-triumph-desolate-chambers-echo.mp3,musify +8,de6095d0-40f8-4121-8ae9-7ca8332b0fc4,The Fangs of Miseries Past,The Fires of Tragedy,['Nocturnal Triumph'],Nocturnal Triumph,1,2,1,,2018,2018,6bee5e73-5340-4514-90aa-22dad13c2206,874bba46-d47f-4ef3-9960-9468c6dfa536,6bee5e73-5340-4514-90aa-22dad13c2206,Official,4,eng,Album,,,,https://musify.club/track/dl/11131947/nocturnal-triumph-the-fires-of-tragedy.mp3,musify +9,4337fac9-ee73-4183-bd63-7d6b7c279e1f,The Fangs of Miseries Past,The Fangs of Miseries Past,['Nocturnal Triumph'],Nocturnal Triumph,2,2,2,,2018,2018,6bee5e73-5340-4514-90aa-22dad13c2206,874bba46-d47f-4ef3-9960-9468c6dfa536,6bee5e73-5340-4514-90aa-22dad13c2206,Official,4,eng,Album,,,,https://musify.club/track/dl/11131949/nocturnal-triumph-the-fangs-of-miseries-past.mp3,musify +10,d9118f78-34bd-4c57-8df6-34ee2775a895,The Fangs of Miseries Past,A Moon Cloaked in Despair,['Nocturnal Triumph'],Nocturnal Triumph,3,2,3,,2018,2018,6bee5e73-5340-4514-90aa-22dad13c2206,874bba46-d47f-4ef3-9960-9468c6dfa536,6bee5e73-5340-4514-90aa-22dad13c2206,Official,4,eng,Album,,,,https://musify.club/track/dl/11131948/nocturnal-triumph-a-moon-cloaked-in-despair.mp3,musify +11,2e6cfa77-ee95-4c76-a802-06aa8cf8364a,The Fangs of Miseries Past,Towards Rebirth and Demise,['Nocturnal Triumph'],Nocturnal Triumph,4,2,4,,2018,2018,6bee5e73-5340-4514-90aa-22dad13c2206,874bba46-d47f-4ef3-9960-9468c6dfa536,6bee5e73-5340-4514-90aa-22dad13c2206,Official,4,eng,Album,,,,https://musify.club/track/dl/11131950/nocturnal-triumph-towards-rebirth-and-demise.mp3,musify diff --git a/src/temp/.cache3.csv b/src/temp/.cache3.csv index bc05ea4..db86649 100644 --- a/src/temp/.cache3.csv +++ b/src/temp/.cache3.csv @@ -1,14 +1,13 @@ ,id,album,title,artist,album_artist,tracknumber,albumsort,titlesort,isrc,date,year,musicbrainz_artistid,musicbrainz_albumid,musicbrainz_albumartistid,musicbrainz_albumstatus,total_tracks,language,musicbrainz_albumtype,compilation,releasecountry,barcode,url,src,path,file,genre -0,5e1ee2c5-502c-44d3-b1bc-22803441d8c6,Abgesägte Schrotflinte,Abgesägte Schrotflinte,['Crystal F'],Crystal F,1,0,1,DEVY82000223,2021-03-12,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,ca933487-97ff-4a44-ab6f-9e4fcd26ceda,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4062851774871,https://www.youtube.com/watch?v=QLvZVY_iiUc,youtube,horrorcore/Crystal F/Abgesägte Schrotflinte,horrorcore/Crystal F/Abgesägte Schrotflinte/Abgesägte Schrotflinte.mp3,horrorcore -1,71e4dd64-6479-45be-b9a0-37d4edc364fa,Das Leben danach,Schockschwerenot,['Crystal F'],Crystal F,2,0,2,DEVY82000317,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=VJESTJWnRhU,youtube,horrorcore/Crystal F/Das Leben danach,horrorcore/Crystal F/Das Leben danach/Schockschwerenot.mp3,horrorcore -2,c6b0ce24-b75b-40ad-a12a-1fa8a412dc14,Das Leben danach,Genug,['Crystal F'],Crystal F,3,0,3,DEVY82000308,2021-04-30,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,e9043dfa-189e-4caa-94c8-7e329d009389,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4062851604161,https://www.youtube.com/watch?v=C0-n46T22vo,youtube,horrorcore/Crystal F/Genug,horrorcore/Crystal F/Genug/Genug.mp3,horrorcore -3,d01df009-40cf-4bae-8ab4-19e70c552feb,Du willst mit mir gehen,Du willst mit mir gehen,['Crystal F'],Crystal F,4,0,4,DEVY82000296,2021-04-02,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,2659e838-ac3b-425b-935d-7cb93043bb3f,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4062851783668,https://www.youtube.com/watch?v=D0rYWsUgDuQ,youtube,horrorcore/Crystal F/Du willst mit mir gehen,horrorcore/Crystal F/Du willst mit mir gehen/Du willst mit mir gehen.mp3,horrorcore -4,5a3d0f0f-d847-4678-b14d-f0875339ec13,Das Leben danach,Komm wir tun mir weh,['Crystal F'],Crystal F,5,0,5,DEVY82000318,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=3Hq0_qc3zqo,youtube,horrorcore/Crystal F/Das Leben danach,horrorcore/Crystal F/Das Leben danach/Komm wir tun mir weh.mp3,horrorcore -5,8426e0e1-e14b-48ec-8e53-950fdf3b8754,Das Leben danach,S4distentreff 4,"['Crystal F', 'MXP', 'Dollar John', 'G-Ko']",Crystal F,6,0,6,DEVY82000319,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=sFmYIN0JNec,youtube,horrorcore/Crystal F/Das Leben danach,horrorcore/Crystal F/Das Leben danach/S4distentreff 4.mp3,horrorcore -6,1543f558-4d54-4047-a6aa-affd02e89ab4,Das Leben danach,Stehen geblieben,['Crystal F'],Crystal F,7,0,7,DEVY82000320,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=V65bn2jN4ZE,youtube,horrorcore/Crystal F/Das Leben danach,horrorcore/Crystal F/Das Leben danach/Stehen geblieben.mp3,horrorcore -7,ccf6d043-7157-492b-bca0-78a24c0c8372,Das Leben danach,"Blau, grün, gelb","['Crystal F', 'Ruffiction']",Crystal F,8,0,8,DEVY82000321,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=Mo7hZ984faU,youtube,horrorcore/Crystal F/Das Leben danach,"horrorcore/Crystal F/Das Leben danach/Blau, grün, gelb.mp3",horrorcore -8,41ad47ab-0337-4fcc-b369-5a4b1e12dc3c,Das Leben danach,Was fühlst du noch,"['Crystal F', 'Zero/Zero', 'Nils Davis', 'Taha']",Crystal F,9,0,9,DEVY82000322,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=T15QiksB7do,youtube,horrorcore/Crystal F/Das Leben danach,horrorcore/Crystal F/Das Leben danach/Was fühlst du noch.mp3,horrorcore -9,ed6cc3e1-d493-4a51-973c-3adc1a6ea978,Das Leben danach,Katzen,"['Crystal F', 'Kito', 'Kirby']",Crystal F,10,0,10,DEVY82000323,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=eKCpu74GYxs,youtube,horrorcore/Crystal F/Das Leben danach,horrorcore/Crystal F/Das Leben danach/Katzen.mp3,horrorcore -10,b49a466f-e77b-465d-9c01-06298efb0c9d,Das Leben danach,Wach sein,['Crystal F'],Crystal F,11,0,11,DEVY82000324,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=dboTFFBUPW0,youtube,horrorcore/Crystal F/Das Leben danach,horrorcore/Crystal F/Das Leben danach/Wach sein.mp3,horrorcore -11,86b43bec-eea6-40ae-8624-c1e404204ba1,Das Leben danach,Rote Augen,['Crystal F'],Crystal F,12,0,12,DEVY82000325,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=zvYHKYz6AGI,youtube,horrorcore/Crystal F/Das Leben danach,horrorcore/Crystal F/Das Leben danach/Rote Augen.mp3,horrorcore -12,2a3dc1ae-6752-420f-b1d3-ca9e26a15c48,Das Leben danach,Schlechtes Essen,['Crystal F'],Crystal F,13,0,13,DEVY82000326,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=XAfpge1FxLY,youtube,horrorcore/Crystal F/Das Leben danach,horrorcore/Crystal F/Das Leben danach/Schlechtes Essen.mp3,horrorcore +0,f0d029c3-fcfa-4ae3-b05c-9900807c3bd6,Into Light's Graven Womb,The Key and the Stone,['Nocturnal Triumph'],Nocturnal Triumph,2,0,2,,2016,2016,6bee5e73-5340-4514-90aa-22dad13c2206,f5910dba-3972-4250-956f-7cfa7cbd4cd1,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,,,https://musify.club/track/dl/10342760/nocturnal-triumph-the-key-and-the-stone.mp3,musify,black metal/Nocturnal Triumph/Into Light's Graven Womb,black metal/Nocturnal Triumph/Into Light's Graven Womb/The Key and the Stone.mp3,black metal +1,587999cf-d697-49e3-9c17-3d25c8d9acfe,Into Light's Graven Womb,Of Worship and Principle,['Nocturnal Triumph'],Nocturnal Triumph,3,0,3,,2016,2016,6bee5e73-5340-4514-90aa-22dad13c2206,f5910dba-3972-4250-956f-7cfa7cbd4cd1,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,,,https://musify.club/track/dl/10342761/nocturnal-triumph-of-worship-and-principle.mp3,musify,black metal/Nocturnal Triumph/Into Light's Graven Womb,black metal/Nocturnal Triumph/Into Light's Graven Womb/Of Worship and Principle.mp3,black metal +2,f819f1f5-d3d6-4776-b56b-57b75d04844b,Into Light's Graven Womb,Into Light's Graven Womb,['Nocturnal Triumph'],Nocturnal Triumph,4,0,4,,2016,2016,6bee5e73-5340-4514-90aa-22dad13c2206,f5910dba-3972-4250-956f-7cfa7cbd4cd1,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,,,https://musify.club/track/dl/10342762/nocturnal-triumph-into-lights-graven-womb.mp3,musify,black metal/Nocturnal Triumph/Into Light's Graven Womb,black metal/Nocturnal Triumph/Into Light's Graven Womb/Into Light's Graven Womb.mp3,black metal +3,66a00bfa-e1f0-467b-98f5-559e71538188,Into Light's Graven Womb,Desolate Chambers Echo,['Nocturnal Triumph'],Nocturnal Triumph,5,0,5,,2016,2016,6bee5e73-5340-4514-90aa-22dad13c2206,f5910dba-3972-4250-956f-7cfa7cbd4cd1,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,,,https://musify.club/track/dl/10342763/nocturnal-triumph-desolate-chambers-echo.mp3,musify,black metal/Nocturnal Triumph/Into Light's Graven Womb,black metal/Nocturnal Triumph/Into Light's Graven Womb/Desolate Chambers Echo.mp3,black metal +4,f0d029c3-fcfa-4ae3-b05c-9900807c3bd6,Into Light's Graven Womb,The Key and the Stone,['Nocturnal Triumph'],Nocturnal Triumph,2,1,2,,2017-07-31,2017,6bee5e73-5340-4514-90aa-22dad13c2206,81fa66bc-425e-45c3-ad80-2a7624e380a4,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,XW,,https://musify.club/track/dl/10342760/nocturnal-triumph-the-key-and-the-stone.mp3,musify,black metal/Nocturnal Triumph/Into Light's Graven Womb,black metal/Nocturnal Triumph/Into Light's Graven Womb/The Key and the Stone.mp3,black metal +5,587999cf-d697-49e3-9c17-3d25c8d9acfe,Into Light's Graven Womb,Of Worship and Principle,['Nocturnal Triumph'],Nocturnal Triumph,3,1,3,,2017-07-31,2017,6bee5e73-5340-4514-90aa-22dad13c2206,81fa66bc-425e-45c3-ad80-2a7624e380a4,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,XW,,https://musify.club/track/dl/10342761/nocturnal-triumph-of-worship-and-principle.mp3,musify,black metal/Nocturnal Triumph/Into Light's Graven Womb,black metal/Nocturnal Triumph/Into Light's Graven Womb/Of Worship and Principle.mp3,black metal +6,f819f1f5-d3d6-4776-b56b-57b75d04844b,Into Light's Graven Womb,Into Light's Graven Womb,['Nocturnal Triumph'],Nocturnal Triumph,4,1,4,,2017-07-31,2017,6bee5e73-5340-4514-90aa-22dad13c2206,81fa66bc-425e-45c3-ad80-2a7624e380a4,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,XW,,https://musify.club/track/dl/10342762/nocturnal-triumph-into-lights-graven-womb.mp3,musify,black metal/Nocturnal Triumph/Into Light's Graven Womb,black metal/Nocturnal Triumph/Into Light's Graven Womb/Into Light's Graven Womb.mp3,black metal +7,66a00bfa-e1f0-467b-98f5-559e71538188,Into Light's Graven Womb,Desolate Chambers Echo,['Nocturnal Triumph'],Nocturnal Triumph,5,1,5,,2017-07-31,2017,6bee5e73-5340-4514-90aa-22dad13c2206,81fa66bc-425e-45c3-ad80-2a7624e380a4,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,XW,,https://musify.club/track/dl/10342763/nocturnal-triumph-desolate-chambers-echo.mp3,musify,black metal/Nocturnal Triumph/Into Light's Graven Womb,black metal/Nocturnal Triumph/Into Light's Graven Womb/Desolate Chambers Echo.mp3,black metal +8,de6095d0-40f8-4121-8ae9-7ca8332b0fc4,The Fangs of Miseries Past,The Fires of Tragedy,['Nocturnal Triumph'],Nocturnal Triumph,1,2,1,,2018,2018,6bee5e73-5340-4514-90aa-22dad13c2206,874bba46-d47f-4ef3-9960-9468c6dfa536,6bee5e73-5340-4514-90aa-22dad13c2206,Official,4,eng,Album,,,,https://musify.club/track/dl/11131947/nocturnal-triumph-the-fires-of-tragedy.mp3,musify,black metal/Nocturnal Triumph/The Fangs of Miseries Past,black metal/Nocturnal Triumph/The Fangs of Miseries Past/The Fires of Tragedy.mp3,black metal +9,4337fac9-ee73-4183-bd63-7d6b7c279e1f,The Fangs of Miseries Past,The Fangs of Miseries Past,['Nocturnal Triumph'],Nocturnal Triumph,2,2,2,,2018,2018,6bee5e73-5340-4514-90aa-22dad13c2206,874bba46-d47f-4ef3-9960-9468c6dfa536,6bee5e73-5340-4514-90aa-22dad13c2206,Official,4,eng,Album,,,,https://musify.club/track/dl/11131949/nocturnal-triumph-the-fangs-of-miseries-past.mp3,musify,black metal/Nocturnal Triumph/The Fangs of Miseries Past,black metal/Nocturnal Triumph/The Fangs of Miseries Past/The Fangs of Miseries Past.mp3,black metal +10,d9118f78-34bd-4c57-8df6-34ee2775a895,The Fangs of Miseries Past,A Moon Cloaked in Despair,['Nocturnal Triumph'],Nocturnal Triumph,3,2,3,,2018,2018,6bee5e73-5340-4514-90aa-22dad13c2206,874bba46-d47f-4ef3-9960-9468c6dfa536,6bee5e73-5340-4514-90aa-22dad13c2206,Official,4,eng,Album,,,,https://musify.club/track/dl/11131948/nocturnal-triumph-a-moon-cloaked-in-despair.mp3,musify,black metal/Nocturnal Triumph/The Fangs of Miseries Past,black metal/Nocturnal Triumph/The Fangs of Miseries Past/A Moon Cloaked in Despair.mp3,black metal +11,2e6cfa77-ee95-4c76-a802-06aa8cf8364a,The Fangs of Miseries Past,Towards Rebirth and Demise,['Nocturnal Triumph'],Nocturnal Triumph,4,2,4,,2018,2018,6bee5e73-5340-4514-90aa-22dad13c2206,874bba46-d47f-4ef3-9960-9468c6dfa536,6bee5e73-5340-4514-90aa-22dad13c2206,Official,4,eng,Album,,,,https://musify.club/track/dl/11131950/nocturnal-triumph-towards-rebirth-and-demise.mp3,musify,black metal/Nocturnal Triumph/The Fangs of Miseries Past,black metal/Nocturnal Triumph/The Fangs of Miseries Past/Towards Rebirth and Demise.mp3,black metal diff --git a/src/youtube_music.py b/src/youtube_music.py index 6f8eaf7..a138e2a 100644 --- a/src/youtube_music.py +++ b/src/youtube_music.py @@ -1,41 +1,52 @@ import youtube_dl import pandas as pd -import jellyfish import logging +import time +import phonetic_compares -YDL_OPTIONS = {'format': 'bestaudio', 'noplaylist':'True'} +YDL_OPTIONS = {'format': 'bestaudio', 'noplaylist': 'True'} YOUTUBE_URL_KEY = 'webpage_url' +YOUTUBE_TITLE_KEY = 'title' +WAIT_BETWEEN_BLOCK = 10 +MAX_TRIES = 3 + def get_youtube_from_isrc(isrc: str): # https://stackoverflow.com/questions/63388364/searching-youtube-videos-using-youtube-dl with youtube_dl.YoutubeDL(YDL_OPTIONS) as ydl: - video = ydl.extract_info(f"ytsearch:{isrc}", download=False)['entries'][0] - print(type(video)) - if YOUTUBE_URL_KEY not in video: - return None - return { + videos = ydl.extract_info(f"ytsearch:{isrc}", download=False)['entries'] + + return [{ 'url': video[YOUTUBE_URL_KEY], - 'title': video['title'] - } + 'title': video[YOUTUBE_TITLE_KEY] + } for video in videos] + def get_youtube_url(row): if pd.isna(row['isrc']): return None real_title = row['title'].lower() - result = get_youtube_from_isrc(row['isrc']) - video_title = result['title'].lower() + final_result = None + results = get_youtube_from_isrc(row['isrc']) + for result in results: + video_title = result['title'].lower() + match, distance = phonetic_compares.match_titles(video_title, real_title) - phonetic_distance = jellyfish.levenshtein_distance(real_title, video_title) + if match: + logging.warning( + f"dont downloading {result['url']} cuz the phonetic distance ({distance}) between {real_title} and {video_title} is to high.") + continue - print(real_title, video_title, phonetic_distance) - if phonetic_distance > 1: - logging.warning(f"dont downloading {result['url']} cuz the phonetic distance ({phonetic_distance}) between {real_title} and {video_title} is to high.") + final_result = result + + if final_result is None: return None - return result['url'] + return final_result['url'] -def download(row): + +def download(row, trie: int = 0): url = row['url'] file_ = row['file'] options = { @@ -49,11 +60,20 @@ def download(row): 'outtmpl': file_ } - with youtube_dl.YoutubeDL(options) as ydl: - ydl.download([url]) + try: + with youtube_dl.YoutubeDL(options) as ydl: + ydl.download([url]) + except youtube_dl.utils.DownloadError: + logging.warning(f"youtube blocked downloading. ({trie}-{MAX_TRIES})") + if trie >= MAX_TRIES: + logging.warning("too many tries, returning") + logging.warning(f"retrying in {WAIT_BETWEEN_BLOCK} seconds again") + time.sleep(WAIT_BETWEEN_BLOCK) + return download(row, trie=trie+1) + if __name__ == "__main__": - # example isrc that exists on youtube music + # example isrc that exists on YouTube music ISRC = "DEUM71500715" result = get_youtube_from_isrc(ISRC) print(result) diff --git a/temp/.cache1.csv b/temp/.cache1.csv index 652d651..51a2883 100644 --- a/temp/.cache1.csv +++ b/temp/.cache1.csv @@ -1,4 +1,5 @@ ,id,album,title,artist,album_artist,tracknumber,albumsort,titlesort,isrc,date,year,musicbrainz_artistid,musicbrainz_albumid,musicbrainz_albumartistid,musicbrainz_albumstatus,total_tracks,language,musicbrainz_albumtype,compilation,releasecountry,barcode +<<<<<<< HEAD 0,03634ecf-5ef1-4ec4-8c9a-89be5df6462d,Mate. Feed. Kill. Repeat.,Slipknot,['Slipknot'],Slipknot,1,2,1,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027 1,c4d73bed-2164-4869-a274-db111f12f09f,Mate. Feed. Kill. Repeat.,Gently,['Slipknot'],Slipknot,2,2,2,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027 2,1be117c9-9cad-4141-82c1-e0c07a5a0d09,Mate. Feed. Kill. Repeat.,Do Nothing / Bitchslap,['Slipknot'],Slipknot,3,2,3,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027 @@ -7,3 +8,15 @@ 5,baf6624a-fc9c-4485-8beb-4aed5d8a0ea6,Mate. Feed. Kill. Repeat.,Confessions,['Slipknot'],Slipknot,6,2,6,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027 6,42119c6c-74a6-4b73-a887-1b9e023db9a5,Mate. Feed. Kill. Repeat.,Some Feel,['Slipknot'],Slipknot,7,2,7,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027 7,a4c44e11-ff51-49f5-b100-658f4e263a59,Mate. Feed. Kill. Repeat.,Killers Are Quiet / Dogfish Rising,['Slipknot'],Slipknot,8,2,8,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027 +======= +0,ba953d81-663e-4acc-90d7-c86005960341,Pain Remains,"Welcome Back, O’ Sleeping Dreamer",['Lorna Shore'],Lorna Shore,1,0,1,,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830 +1,b7b623b0-a64d-40b4-b6cb-b1b45a3b0d91,Pain Remains,Into the Earth,['Lorna Shore'],Lorna Shore,2,0,2,,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830 +2,7dfa4dd2-1ac7-4b17-91b4-fcdc1f859b74,Pain Remains,Sun//Eater,['Lorna Shore'],Lorna Shore,3,0,3,GBDHC2334003,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830 +3,7e6cf7ec-c566-47c1-88e9-da7731089428,Pain Remains,Cursed to Die,['Lorna Shore'],Lorna Shore,4,0,4,,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830 +4,7abf38eb-de34-44e5-9a90-1438a0c54d2d,Pain Remains,Soulless Existence,['Lorna Shore'],Lorna Shore,5,0,5,,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830 +5,a2b9b1e5-7d32-4ba4-9a16-ad63b374a8ad,Pain Remains,Apotheosis,['Lorna Shore'],Lorna Shore,6,0,6,,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830 +6,fcd1d262-bd4f-4838-831a-547cb4066ef8,Pain Remains,Wrath,['Lorna Shore'],Lorna Shore,7,0,7,,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830 +7,4a1dca7c-2409-40e3-9dfa-3ae26789db18,Pain Remains,Pain Remains I: Dancing Like Flames,['Lorna Shore'],Lorna Shore,8,0,8,GBDHC2334008,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830 +8,af01b1dc-f14e-4d02-b91a-d059b235f452,Pain Remains,"Pain Remains II: After All I’ve Done, I’ll Disappear",['Lorna Shore'],Lorna Shore,9,0,9,GBDHC2334009,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830 +9,b9ead1a7-b054-4a8a-8e36-e860ab7e8d5f,Pain Remains,Pain Remains III: In a Sea of Fire,['Lorna Shore'],Lorna Shore,10,0,10,,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830 +>>>>>>> e923dcdaf208a95492af3afaa9e49fbbcfb9520c diff --git a/temp/.cache2.csv b/temp/.cache2.csv index 468cecb..79bcad6 100644 --- a/temp/.cache2.csv +++ b/temp/.cache2.csv @@ -1,4 +1,5 @@ ,id,album,title,artist,album_artist,tracknumber,albumsort,titlesort,isrc,date,year,musicbrainz_artistid,musicbrainz_albumid,musicbrainz_albumartistid,musicbrainz_albumstatus,total_tracks,language,musicbrainz_albumtype,compilation,releasecountry,barcode,url,src +<<<<<<< HEAD 0,03634ecf-5ef1-4ec4-8c9a-89be5df6462d,Mate. Feed. Kill. Repeat.,Slipknot,['Slipknot'],Slipknot,1,2,1,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027,https://musify.club/track/dl/48121/slipknot-slipknot.mp3,musify 1,c4d73bed-2164-4869-a274-db111f12f09f,Mate. Feed. Kill. Repeat.,Gently,['Slipknot'],Slipknot,2,2,2,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027,https://musify.club/track/dl/11541988/slipknot-gently.mp3,musify 2,1be117c9-9cad-4141-82c1-e0c07a5a0d09,Mate. Feed. Kill. Repeat.,Do Nothing / Bitchslap,['Slipknot'],Slipknot,3,2,3,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027,https://musify.club/track/dl/48127/slipknot-do-nothing-bitchslap.mp3,musify @@ -6,3 +7,12 @@ 4,2a0ece26-1d36-4fd1-84be-8dc018a599d1,Mate. Feed. Kill. Repeat.,Tattered & Torn,['Slipknot'],Slipknot,5,2,5,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027,https://musify.club/track/dl/10267/slipknot-tattered-and-torn.mp3,musify 5,baf6624a-fc9c-4485-8beb-4aed5d8a0ea6,Mate. Feed. Kill. Repeat.,Confessions,['Slipknot'],Slipknot,6,2,6,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027,https://musify.club/track/dl/48126/slipknot-confessions.mp3,musify 6,42119c6c-74a6-4b73-a887-1b9e023db9a5,Mate. Feed. Kill. Repeat.,Some Feel,['Slipknot'],Slipknot,7,2,7,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027,https://musify.club/track/dl/48124/slipknot-some-feel.mp3,musify +======= +0,ba953d81-663e-4acc-90d7-c86005960341,Pain Remains,"Welcome Back, O’ Sleeping Dreamer",['Lorna Shore'],Lorna Shore,1,0,1,,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830,https://musify.club/track/dl/18712884/lorna-shore-welcome-back-o-sleeping-dreamer.mp3,musify +1,7dfa4dd2-1ac7-4b17-91b4-fcdc1f859b74,Pain Remains,Sun//Eater,['Lorna Shore'],Lorna Shore,3,0,3,GBDHC2334003,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830,https://musify.club/track/dl/18013578/lorna-shore-sun-eater.mp3,musify +2,7e6cf7ec-c566-47c1-88e9-da7731089428,Pain Remains,Cursed to Die,['Lorna Shore'],Lorna Shore,4,0,4,,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830,https://musify.club/track/dl/18254249/lorna-shore-cursed-to-die.mp3,musify +3,7abf38eb-de34-44e5-9a90-1438a0c54d2d,Pain Remains,Soulless Existence,['Lorna Shore'],Lorna Shore,5,0,5,,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830,https://musify.club/track/dl/18712888/lorna-shore-soulless-existence.mp3,musify +4,4a1dca7c-2409-40e3-9dfa-3ae26789db18,Pain Remains,Pain Remains I: Dancing Like Flames,['Lorna Shore'],Lorna Shore,8,0,8,GBDHC2334008,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830,https://musify.club/track/dl/18712891/lorna-shore-pain-remains-i-dancing-like-flames.mp3,musify +5,af01b1dc-f14e-4d02-b91a-d059b235f452,Pain Remains,"Pain Remains II: After All I’ve Done, I’ll Disappear",['Lorna Shore'],Lorna Shore,9,0,9,GBDHC2334009,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830,https://musify.club/track/dl/18712892/lorna-shore-pain-remains-ii-after-all-ive-done-ill-disappear.mp3,musify +6,b9ead1a7-b054-4a8a-8e36-e860ab7e8d5f,Pain Remains,Pain Remains III: In a Sea of Fire,['Lorna Shore'],Lorna Shore,10,0,10,,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830,https://musify.club/track/dl/18712893/lorna-shore-pain-remains-iii-in-a-sea-of-fire.mp3,musify +>>>>>>> e923dcdaf208a95492af3afaa9e49fbbcfb9520c diff --git a/temp/.cache3.csv b/temp/.cache3.csv index 24f675f..519f7c2 100644 --- a/temp/.cache3.csv +++ b/temp/.cache3.csv @@ -1,4 +1,5 @@ ,id,album,title,artist,album_artist,tracknumber,albumsort,titlesort,isrc,date,year,musicbrainz_artistid,musicbrainz_albumid,musicbrainz_albumartistid,musicbrainz_albumstatus,total_tracks,language,musicbrainz_albumtype,compilation,releasecountry,barcode,url,src,path,file,genre +<<<<<<< HEAD 0,03634ecf-5ef1-4ec4-8c9a-89be5df6462d,Mate. Feed. Kill. Repeat.,Slipknot,['Slipknot'],Slipknot,1,2,1,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027,https://musify.club/track/dl/48121/slipknot-slipknot.mp3,musify,nu metal/Slipknot/Mate. Feed. Kill. Repeat.,nu metal/Slipknot/Mate. Feed. Kill. Repeat./Slipknot.mp3,nu metal 1,c4d73bed-2164-4869-a274-db111f12f09f,Mate. Feed. Kill. Repeat.,Gently,['Slipknot'],Slipknot,2,2,2,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027,https://musify.club/track/dl/11541988/slipknot-gently.mp3,musify,nu metal/Slipknot/Mate. Feed. Kill. Repeat.,nu metal/Slipknot/Mate. Feed. Kill. Repeat./Gently.mp3,nu metal 2,1be117c9-9cad-4141-82c1-e0c07a5a0d09,Mate. Feed. Kill. Repeat.,Do Nothing / Bitchslap,['Slipknot'],Slipknot,3,2,3,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027,https://musify.club/track/dl/48127/slipknot-do-nothing-bitchslap.mp3,musify,nu metal/Slipknot/Mate. Feed. Kill. Repeat.,nu metal/Slipknot/Mate. Feed. Kill. Repeat./Do Nothing Bitchslap.mp3,nu metal @@ -6,3 +7,12 @@ 4,2a0ece26-1d36-4fd1-84be-8dc018a599d1,Mate. Feed. Kill. Repeat.,Tattered & Torn,['Slipknot'],Slipknot,5,2,5,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027,https://musify.club/track/dl/10267/slipknot-tattered-and-torn.mp3,musify,nu metal/Slipknot/Mate. Feed. Kill. Repeat.,nu metal/Slipknot/Mate. Feed. Kill. Repeat./Tattered & Torn.mp3,nu metal 5,baf6624a-fc9c-4485-8beb-4aed5d8a0ea6,Mate. Feed. Kill. Repeat.,Confessions,['Slipknot'],Slipknot,6,2,6,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027,https://musify.club/track/dl/48126/slipknot-confessions.mp3,musify,nu metal/Slipknot/Mate. Feed. Kill. Repeat.,nu metal/Slipknot/Mate. Feed. Kill. Repeat./Confessions.mp3,nu metal 6,42119c6c-74a6-4b73-a887-1b9e023db9a5,Mate. Feed. Kill. Repeat.,Some Feel,['Slipknot'],Slipknot,7,2,7,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027,https://musify.club/track/dl/48124/slipknot-some-feel.mp3,musify,nu metal/Slipknot/Mate. Feed. Kill. Repeat.,nu metal/Slipknot/Mate. Feed. Kill. Repeat./Some Feel.mp3,nu metal +======= +0,ba953d81-663e-4acc-90d7-c86005960341,Pain Remains,"Welcome Back, O’ Sleeping Dreamer",['Lorna Shore'],Lorna Shore,1,0,1,,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830,https://musify.club/track/dl/18712884/lorna-shore-welcome-back-o-sleeping-dreamer.mp3,musify,deathcore/Lorna Shore/Pain Remains,"deathcore/Lorna Shore/Pain Remains/Welcome Back, O’ Sleeping Dreamer.mp3",deathcore +1,7dfa4dd2-1ac7-4b17-91b4-fcdc1f859b74,Pain Remains,Sun//Eater,['Lorna Shore'],Lorna Shore,3,0,3,GBDHC2334003,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830,https://musify.club/track/dl/18013578/lorna-shore-sun-eater.mp3,musify,deathcore/Lorna Shore/Pain Remains,deathcore/Lorna Shore/Pain Remains/Sun Eater.mp3,deathcore +2,7e6cf7ec-c566-47c1-88e9-da7731089428,Pain Remains,Cursed to Die,['Lorna Shore'],Lorna Shore,4,0,4,,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830,https://musify.club/track/dl/18254249/lorna-shore-cursed-to-die.mp3,musify,deathcore/Lorna Shore/Pain Remains,deathcore/Lorna Shore/Pain Remains/Cursed to Die.mp3,deathcore +3,7abf38eb-de34-44e5-9a90-1438a0c54d2d,Pain Remains,Soulless Existence,['Lorna Shore'],Lorna Shore,5,0,5,,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830,https://musify.club/track/dl/18712888/lorna-shore-soulless-existence.mp3,musify,deathcore/Lorna Shore/Pain Remains,deathcore/Lorna Shore/Pain Remains/Soulless Existence.mp3,deathcore +4,4a1dca7c-2409-40e3-9dfa-3ae26789db18,Pain Remains,Pain Remains I: Dancing Like Flames,['Lorna Shore'],Lorna Shore,8,0,8,GBDHC2334008,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830,https://musify.club/track/dl/18712891/lorna-shore-pain-remains-i-dancing-like-flames.mp3,musify,deathcore/Lorna Shore/Pain Remains,deathcore/Lorna Shore/Pain Remains/Pain Remains I: Dancing Like Flames.mp3,deathcore +5,af01b1dc-f14e-4d02-b91a-d059b235f452,Pain Remains,"Pain Remains II: After All I’ve Done, I’ll Disappear",['Lorna Shore'],Lorna Shore,9,0,9,GBDHC2334009,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830,https://musify.club/track/dl/18712892/lorna-shore-pain-remains-ii-after-all-ive-done-ill-disappear.mp3,musify,deathcore/Lorna Shore/Pain Remains,"deathcore/Lorna Shore/Pain Remains/Pain Remains II: After All I’ve Done, I’ll Disappear.mp3",deathcore +6,b9ead1a7-b054-4a8a-8e36-e860ab7e8d5f,Pain Remains,Pain Remains III: In a Sea of Fire,['Lorna Shore'],Lorna Shore,10,0,10,,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830,https://musify.club/track/dl/18712893/lorna-shore-pain-remains-iii-in-a-sea-of-fire.mp3,musify,deathcore/Lorna Shore/Pain Remains,deathcore/Lorna Shore/Pain Remains/Pain Remains III: In a Sea of Fire.mp3,deathcore +>>>>>>> e923dcdaf208a95492af3afaa9e49fbbcfb9520c