Всем привет. Собственно вопрос след, как загрузить видео в одноклассники в группу? Сейчас делаю вот так, но возвращается 104. За основу контроллера взят оф SDK.
https://github.com/alternativshik/python-odnoklassniki#coding: utf8
import requests
import odnoklassniki
from requests_toolbelt.multipart.encoder import MultipartEncoder
# 1. Получаем урл для загрузки
title = u'Тестовое видео'
video_path = '/var/opt/mp4.mp4'
api = odnoklassniki.Odnoklassniki(
'', '', ''
)
def __finalize_upload_video(video_id, api):
"""
Завершает загрузку видео, и возвращает результат.(bool)
:param video_id: ID загруженного видео.
:return Результат выполнения операции(bool)
"""
try:
result = api.video.update(vid=video_id)
except ValueError as ex:
if ex.message == 'No JSON object could be decoded':
return True
return False
except Exception as ex:
return False
"""
Согласно манулу, штатное завершение загрузки возвращает '', однако
простая отправка данных формы(html) возвращает <retval>1</retval>,
а python возвращает ValueError
"""
return True if result == '' else result
url_obj = api.video.getUploadUrl(gid='ID группы', file_name=title, file_size=0)
video_id = url_obj.get('video_id')
url = url_obj.get('upload_url')
errors = []
file = open(video_path, 'rb')
# 2. Загружаем ролик request.post
multipart_data = MultipartEncoder(
fields={'video': (title, file, 'video/mp4')}
)
try:
response = requests.post(
url,
data=multipart_data,
headers={'Content-Type': multipart_data.content_type}
)
except Exception as ex:
print(u"1" + str(ex.message))
errors.append(ex.message)
else:
if response.status_code != 200:
print(u"2" + str(response.content))
errors.append(response.content)
# 3. Завершаем загрузку
# Проверяем статус окончания загрузки, при успешном завершении возвращает ''
if not __finalize_upload_video(video_id, api):
errors.append(u"Произошла неизвестная ошибка.")
# 4. Проверяем что не было ошибок.
if errors:
raise Exception(u"{}".format(errors))
В логах:
1('Connection aborted.', error(104, 'Connection reset by peer')) # Вернулось через первый принт
[ProtocolError('Connection aborted.', error(104, 'Connection reset by peer'))]