diff --git a/src/__pycache__/youtube_music.cpython-310.pyc b/src/__pycache__/youtube_music.cpython-310.pyc index 33f5d80..09c6d05 100644 Binary files a/src/__pycache__/youtube_music.cpython-310.pyc and b/src/__pycache__/youtube_music.cpython-310.pyc differ diff --git a/src/main.py b/src/main.py index 87264dc..47a1665 100644 --- a/src/main.py +++ b/src/main.py @@ -71,4 +71,4 @@ def cli(start_at: int = 0): if __name__ == "__main__": - cli(start_at=0) + cli(start_at=3) diff --git a/src/youtube_music.py b/src/youtube_music.py index 6f8eaf7..c469378 100644 --- a/src/youtube_music.py +++ b/src/youtube_music.py @@ -2,10 +2,13 @@ import youtube_dl import pandas as pd import jellyfish import logging +import time - -YDL_OPTIONS = {'format': 'bestaudio', 'noplaylist':'True'} +YDL_OPTIONS = {'format': 'bestaudio', 'noplaylist': 'True'} YOUTUBE_URL_KEY = 'webpage_url' +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 @@ -19,6 +22,7 @@ def get_youtube_from_isrc(isrc: str): 'title': video['title'] } + def get_youtube_url(row): if pd.isna(row['isrc']): return None @@ -31,11 +35,13 @@ def get_youtube_url(row): 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.") + logging.warning( + f"dont downloading {result['url']} cuz the phonetic distance ({phonetic_distance}) between {real_title} and {video_title} is to high.") return None return result['url'] -def download(row): + +def download(row, trie: int = 0): url = row['url'] file_ = row['file'] options = { @@ -49,11 +55,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)