Задать вопрос
@sodden13

Как решить ошибку скачивания файла pytube?

Добрый день! Решил написать минипрогу для укачивания видео или аудио-дорожки с ютюба.

async def install_data(link: str, file_name: str, _type: str, path: str, _lang: str): # get link of YT-video

    language = lang[_lang]
    try:
        video = YouTube(link) # get video object

        if _type == 'audio':
            video = video.streams.get_audio_only() # get audio

        if _type == 'video':
            video = video.streams.get_highest_resolution()

        file = video.download(f'{path}') # install to dir ТУТ ОШИБКА ДРОПАЕТСЯ
        os.rename(file, f"{path}/{file_name}.mp3") if _type == 'audio' else os.rename(file, f"{path}/{file_name}.mp4") # rename file

        return language['success']

    except Exception as e:
        print(e)
        return f"{language['err']} + \n {e}"


При попытке скачать аудиодорожку с названием VIDEOCLUB - Amour plastique (Lyrics / Paroles) пишет что путь не найден. Я предполагаю что это из-за / в (Lyrics / Paroles). Не могу придумать как эту ошибку грамотно обработать чтобы видео можно было скачать и с кайфом смотреть
  • Вопрос задан
  • 97 просмотров
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
Lord_of_Rings
@Lord_of_Rings Куратор тега Python
Дунадан - северный странник. Злой, но очень добрый
У вас ошибка в os.rename(file, f"{path}/{file_name}.mp3")
video.download(f'{path}') очищает имя скачиваемого файла от недопустимых символов, но в file_name они остаются, поэтому он и не находит f"{path}/{file_name}.mp3

Этот код должен отрабатывать правильно:
# Функция для очистки имени файла от недопустимых символов
def clean_filename(filename):
    # Заменяем все недопустимые символы на подчеркивания
    return re.sub(r'[\\/*?:"<>|]', '_', filename)

async def install_data(link: str, file_name: str, _type: str, path: str, _lang: str):
    language = lang[_lang]
    try:
        video = YouTube(link)

        if _type == 'audio':
            video = video.streams.get_audio_only()

        if _type == 'video':
            video = video.streams.get_highest_resolution()

        # Очищаем имя файла от недопустимых символов
        clean_file_name = clean_filename(file_name)

        file = video.download(path)
        extension = 'mp3' if _type == 'audio' else 'mp4'
        os.rename(file, f"{path}/{clean_file_name}.{extension}")

        return language['success']

    except Exception as e:
        print(e)
        return f"{language['err']} + \n {e}"
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы