@N1ghtroad
Разработчик C++/Qt

Закачка видео на Facebook с использованием graph api v2.3 (Resumable Upload). Может кто помочь?

Есть приложение на Qt, предназначенное для аплоада фото/видео в соц. сети (в том числе и FB). Сейчас работает на старой версии Api (2.1), отсюда ограничения на размер файла в 1гб и регулярные HTTP 504. Так что стоит задача перевести его на v2.3 с возобновляемыми закачками.
Авторизацию я прохожу успешно. Инит закачки - тоже, получаю все необходимые параметры. Но загрузка первой же чанки заканчивается следующей ошибкой:
{"error":{"message":"Service temporarily unavailable","type":"FacebookApiException","is_transient":true,"code":2,"error_subcode":1363030,"error_user_title":"Video Upload Time Out","error_user_msg":"Your video upload timed out before it could be completed. This is probably because of a slow network connection or because the video you're trying to upload is too large. Please try again."}}

В качестве связи я уверен. Чанка имеет размер 1мб (пробовал загружать файлы меньше - чанка меньше, результат тот-же). Так что всё не так очевидно.

Вот кусок кода, отправляющий чанку (над ним я уже долго колдую, так что выглядит страшновато)
QNetworkRequest request;
request.setUrl(QUrl(QString("https://graph-video.facebook.com/v2.3/me/videos")));
QHttpMultiPart *body = new QHttpMultiPart(QHttpMultiPart::FormDataType);

_file = new QFile(filename);
_file->open(QIODevice::ReadOnly);

QHttpPart tokenPart, phasePart, sessionPart, offsetPart, dataPart;
tokenPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"access_token\""));
tokenPart.setBody(accessToken.toUtf8());

phasePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"upload_phase\""));
phasePart.setBody(phaseTransfer.toUtf8());

sessionPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"upload_session_id\""));
sessionPart.setBody(_sessionId.toUtf8());

offsetPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"start_offset\""));
offsetPart.setBody(QString::number(_startOffset).toUtf8());

QHttpPart dataPart;
dataPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"video_file_chunk\""));
QByteArray data = _file->read(_endOffset - _startOffset);
dataPart.setBody(data);

body->append(tokenPart);
body->append(phasePart);
body->append(offsetPart);
body->append(sessionPart);
body->append(dataPart);

_server->post(request, body);


Описание, по которому делаю, вот: https://developers.facebook.com/docs/graph-api/vid...

Может, кто сталкивался с подобным или даже имеет рабочий пример? Буду благодарен любой помощи.
  • Вопрос задан
  • 497 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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