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

Как отправить видео в мессенджер MAX с прогрессом загрузки Python (tqdm)?

С помощью функции ниже пытаюсь отправить видео на полученный url в мессенджер MAX но получаю ошибку 412 (HTTP Status 412 – Precondition Failed)

def upload_videoo(video_path):
    headers = {
        'Authorization': TOKEN,
    }
    url = f"https://platform-api.max.ru/uploads?type=video"
    upload_url = requests.post(url, headers=headers)
    download_url=upload_url.json().get('url')
    print(upload_url.json().get('token'))
    session=requests.Session()

    # Открываем файл для чтения в бинарном режиме
    with open(video_path, 'rb') as video_file:
        # Получаем размер файла для прогресса
        total_size = os.path.getsize(video_path)
        # Создаем генератор для передачи данных с прогрессом
        def upload_generator():
            with tqdm(total=total_size, unit='B', unit_scale=True, desc='Отправка в MAX') as pbar:
                while True:
                    chunk = video_file.read(1024 * 1024)  # Читаем по 1 МБ
                    if not chunk:
                        break
                    pbar.update(len(chunk))
                    yield chunk
                    
        # Отправляем POST-запрос
        response = session.post(download_url, data=upload_generator(), headers=headers)
        session.close()    
    # Проверяем статус ответа
    if response.status_code in [200, 201]:
        return response.json().get('token')
    else:
        print(f"Ошибка загрузки: {response.status_code}, {response.text}")
        return None


d79666ceac4135e4ed8711576a311000.png

Какие заголовки еще прописать для отправки видео с возобнавляемой отправкой видео файла в случае ошибки?
P.S.: По полученному токену из скриншота нет загруженного мною видео даже спустя неделю.
  • Вопрос задан
  • 289 просмотров
Подписаться 2 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Академия Эдюсон
    Python-разработчик + ИИ
    9 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Python-разработчик + ИИ
    8 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
opium
@opium
Просто люблю качественно работать
У меня с похожим было — requests при передаче генератора не ставит Content-Length, и сервер отдаёт 412. Используй tqdm.wrapattr поверх файлового объекта:
wrapped = tqdm.wrapattr(f, "read", total=total_size)
, и добавь "Content-Length": str(total_size) в заголовки запроса к upload_url.

p.s. токен для POST /messages берётся из ответа первого POST /uploads, а не из ответа загрузки — там возвращается только retval.
Ответ написан
Ваш ответ на вопрос

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

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