addet multiple tries to youtube downloading

This commit is contained in:
lars 2022-10-24 12:17:22 +02:00
parent 79a18e3c15
commit 77e53e5e1e
3 changed files with 23 additions and 8 deletions

View File

@ -71,4 +71,4 @@ def cli(start_at: int = 0):
if __name__ == "__main__": if __name__ == "__main__":
cli(start_at=0) cli(start_at=3)

View File

@ -2,10 +2,13 @@ import youtube_dl
import pandas as pd import pandas as pd
import jellyfish import jellyfish
import logging import logging
import time
YDL_OPTIONS = {'format': 'bestaudio', 'noplaylist': 'True'} YDL_OPTIONS = {'format': 'bestaudio', 'noplaylist': 'True'}
YOUTUBE_URL_KEY = 'webpage_url' YOUTUBE_URL_KEY = 'webpage_url'
WAIT_BETWEEN_BLOCK = 10
MAX_TRIES = 3
def get_youtube_from_isrc(isrc: str): def get_youtube_from_isrc(isrc: str):
# https://stackoverflow.com/questions/63388364/searching-youtube-videos-using-youtube-dl # 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'] 'title': video['title']
} }
def get_youtube_url(row): def get_youtube_url(row):
if pd.isna(row['isrc']): if pd.isna(row['isrc']):
return None return None
@ -31,11 +35,13 @@ def get_youtube_url(row):
print(real_title, video_title, phonetic_distance) print(real_title, video_title, phonetic_distance)
if phonetic_distance > 1: 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 None
return result['url'] return result['url']
def download(row):
def download(row, trie: int = 0):
url = row['url'] url = row['url']
file_ = row['file'] file_ = row['file']
options = { options = {
@ -49,11 +55,20 @@ def download(row):
'outtmpl': file_ 'outtmpl': file_
} }
try:
with youtube_dl.YoutubeDL(options) as ydl: with youtube_dl.YoutubeDL(options) as ydl:
ydl.download([url]) 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__": if __name__ == "__main__":
# example isrc that exists on youtube music # example isrc that exists on YouTube music
ISRC = "DEUM71500715" ISRC = "DEUM71500715"
result = get_youtube_from_isrc(ISRC) result = get_youtube_from_isrc(ISRC)
print(result) print(result)