(python) Обработка ошибок подключения Youtube-dl - PullRequest
0 голосов
/ 27 мая 2020

Я запускаю скрипт для загрузки видео с помощью youtube-dl в python

def dl_videos():
    while True:
        try:
            while True:
                ydl_opts = {
                    'ignoreerrors': 'True',
                    'download_archive': 'archive',
                    'format': 'bestaudio/best',
                    'outtmpl': 'mp3downloads/%(playlist_title)s/%(title)s.%(ext)s',
                    'postprocessors': [{
                        'key': 'FFmpegExtractAudio',
                        'preferredcodec': 'mp3',
                        'preferredquality': '193',
                    }],
                }
                with youtube_dl.YoutubeDL(ydl_opts) as ydl:
                    with open ('PlaylistOnly', 'r') as r:
                        d = r.readlines()
                        for line in d:
                            ydl.download([line])
                time.sleep(24.0 * 60.0 * 60.0)

        except(FileNotFoundError):
            time.sleep(5)
            continue

dl_videos()

, однако я хочу, чтобы этот скрипт обрабатывал разрывы соединения. поэтому, когда я прерываю соединение в середине программы, он полностью выключается с этой ошибкой: [0;31mERROR:[0m Unable to download webpage: <urlopen error [Errno -3] Temporary failure in name resolution> (caused by URLError(gaierror(-3, 'Temporary failure in name resolution')))

Примечание: ошибка возникает только в определенный момент процесса youtube-dl, если онлайн-соединение in lost

Я бы хотел, чтобы программа немного подождала со временем, а затем повторила попытку модуля, но я не уверен, как вообще справиться с этой ошибкой. Идентификатор, если это ошибка особого типа c, которую я могу обработать с исключением. Любая помощь приветствуется

-Edit- (решение)

def dl_videos():
    while True:
        try:
            while True:
                ydl_opts = {
                    'ignoreerrors': 'True',
                    'download_archive': 'archive',
                    'format': 'bestaudio/best',
                    'outtmpl': 'mp3downloads/%(playlist_title)s/%(title)s.%(ext)s',
                    'postprocessors': [{
                        'key': 'FFmpegExtractAudio',
                        'preferredcodec': 'mp3',
                        'preferredquality': '193',
                    }],
                }
                with youtube_dl.YoutubeDL(ydl_opts) as ydl:
                    with open ('PlaylistOnly', 'r') as r:
                        d = r.readlines()
                        for line in d:
                            ydl.download([line])
                #Checks if there's a connection to youtube.com, if there's none it loops back before the "freeze" which my dumb a didnt realize was just the next time.sleep function
                if assets.connect() == False:
                    time.sleep(10)
                    continue
                time.sleep(24.0 * 60.0 * 60.0)

        except(FileNotFoundError):
            time.sleep(5)
            continue

dl_videos()

1 Ответ

0 голосов
/ 27 мая 2020

Попробуйте обновить youtube-dl

Каждый раз, когда у меня возникали странные проблемы с подключением к нему, они решались обновлением.

Также см.
https://github.com/ytdl-org/youtube-dl/issues/618
https://github.com/ytdl-org/youtube-dl/issues/7586

Кроме того, если вы пытаетесь загрузить много ссылок одновременно, возможно, попробуйте разбить их на более мелкие части. Это одна и та же ссылка, с которой каждый раз возникает проблема? Некоторые успешно загружены?

/// EDIT

Теперь, когда вы отредактировали, я лучше понимаю ваш вопрос. Для basi c попробуйте и кроме решения вы можете просто

for line in d:
    try:
        ydl.download([line])
    except:
        print(f"error with {line}")
...