crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> загрузка видео на Youtube
ernie
  опции профиля:
сообщение 11.12.2010, 13:49
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 130
Регистрация: 13.5.2010
Из: Irkutsk
Пользователь №: 1712

Спасибо сказали: 11 раз(а)




Репутация:   1  


Доброго времени суток господа,надо сделать программу,загружающую видео на YouTube,вроде всё делаю по описанию youtube api,логинится вроде нормально(возвращает строку Auth),а вот при попытке загрузить уже видео сервер выдаёт bad request
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    but = new QPushButton("Upload");
    layout()->addWidget(but);
    connect(but,SIGNAL(clicked()),this,SLOT(staTimer()));
}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::staTimer()
{
    QNetworkRequest request;
    request.setUrl(QUrl("https://www.google.com/youtube/accounts/ClientLogin"));
    request.setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");
    QByteArray reqString;
    /////////Email=your email,passwd your pass
    reqString = "Email=_______&Passwd=_____&service=youtube&source=test";
    _networkMen = new QNetworkAccessManager();
    _networkMen->post(request,reqString);
    connect(_networkMen, SIGNAL(finished(QNetworkReply*)), this, SLOT(handleNetworkReply(QNetworkReply*)));
}

void MainWindow::handleNetworkReply(QNetworkReply *reply)
{
    reply->ignoreSslErrors();
    if (reply->error())
    {
        qDebug()<<reply->errorString();
    }
    else
    {
    QByteArray otv = reply->readAll();
    QList<QByteArray> lst(otv.split('\n'));
    lst.removeLast();
    QByteArray auth(lst.at(0).split('=').at(1));
    qDebug()<<otv;
    qDebug()<<auth;
    QFile f("C:\\test.avi");            //video file
    f.open(QIODevice::ReadOnly);
    QByteArray fileBinaryData(f.readAll());
    f.close();
    QNetworkRequest request;
    // forming request
    request.setUrl(QUrl("http://uploads.gdata.youtube.com/feeds/api/users/default/uploads"));
    request.setRawHeader("Authorization","GoogleLogin auth="+auth);
    request.setRawHeader("GData-Version","2");
    request.setRawHeader("X-GData-Key","key=AI39si53w0jmcZxorzxniPVD_rGBRZJhShx6Bh7uKy-JmAn--BAKzINwR3lNzvOtqnClFlCRiXsk-j8UMaE-EAO9U-7EsDJRxg");
    request.setRawHeader("Slug","test.avi");
    request.setRawHeader("Content-Type","multipart/related; boundary=\"f93dcbA3\"");
    request.setRawHeader("Content-Length",QString::number(fileBinaryData.length()).toStdString().c_str());
    request.setRawHeader("Connection","close");
    QByteArray reqString;
    reqString.append("--f93dcbA3\r\n");
    reqString.append("Content-Type: application/atom+xml; charset=UTF-8\r\n");
    reqString.append("\r\n");
    reqString.append("<?xml version=\"1.0\"?>\r\n");
    reqString.append("<entry xmlns=\"http://www.w3.org/2005/Atom\"\r\n");
    reqString.append("xmlns:media=\"http://search.yahoo.com/mrss/\"\r\n");
    reqString.append("xmlns:yt=\"http://gdata.youtube.com/schemas/2007\">\r\n");
    reqString.append("<media:group>\r\n");
    reqString.append("<media:title type=\"plain\">Test test</media:title>\r\n");
    reqString.append("<media:description type=\"plain\">\r\n");
    reqString.append("Batafa\r\n");
    reqString.append("</media:description>\r\n");
    reqString.append("<media:category\r\n");
    reqString.append("scheme=\"http://gdata.youtube.com/schemas/2007/categories.cat\">People\r\n");
    reqString.append("</media:category>\r\n");
    reqString.append("<media:keywords>ara,arara</media:keywords>\r\n");
    reqString.append("</media:group>\r\n");
    reqString.append("</entry>\r\n");
    reqString.append("--f93dcbA3\r\n");
    reqString.append("Content-Type: video/*\r\n");
    reqString.append("Content-Transfer-Encoding: binary\r\n");
    reqString.append("\r\n");
    reqString.append(fileBinaryData);
    reqString.append("\r\n");
    reqString.append("--f93dcbA3");
    netmen2 = new QNetworkAccessManager();
    QNetworkReply *rep=netmen2->post(request,reqString);
    rep->ignoreSslErrors();
    connect(netmen2, SIGNAL(finished(QNetworkReply*)), this, SLOT(handleUploadReply(QNetworkReply*)));
    }
}

void MainWindow::handleUploadReply(QNetworkReply *reply)
{
    reply->ignoreSslErrors();
    if(reply->error())
    {
    qDebug()<<reply->errorString();
    } else
   {
      qDebug()<<reply->readAll();
   }
}


Что я делаю неправильно?заранее спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
crashsp
  опции профиля:
сообщение 12.12.2010, 18:26
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 56
Регистрация: 23.10.2010
Пользователь №: 2144

Спасибо сказали: 8 раз(а)




Репутация:   546  


Вообщем я все сделал как у тебя тока вот в доках api там еще присутствует такая вещь X-GData-Client у тебя я его не увидел
я добавил request.setRawHeader("X-GData-Client","QtYoutube");
так же сединился с сигналом QNetworkReply uploadProgress(qint64,qint64)что б наблюдать картину происходящего и все процесс загрузки пошел но итог проверить еще не успел)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ernie
  опции профиля:
сообщение 12.12.2010, 18:59
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 130
Регистрация: 13.5.2010
Из: Irkutsk
Пользователь №: 1712

Спасибо сказали: 11 раз(а)




Репутация:   1  


crashsp,спасибо за ответ.
По поводу Data-Client'a ,в панели приложения(там же на ютубе,где выдаётся Developer key) написано что не нужен больше он,самое интересное,скачал Free Youtube uploader,такая же беда,не грузит видео...уже даже возникло предположение,что там опять в api понаменяли что-то:)
То что процесс загрузки пошел - это конечно отлично,но тут дело в том,сервер возвращает bad request,то есть уже после отправки полностью запроса возникает ошибка:)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
crashsp
  опции профиля:
сообщение 12.12.2010, 19:04
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 56
Регистрация: 23.10.2010
Пользователь №: 2144

Спасибо сказали: 8 раз(а)




Репутация:   546  


Я сам поспешил и лоханулся (( пока мучаю youtube и присоединяюсь к вопросу )!!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ernie
  опции профиля:
сообщение 12.12.2010, 19:33
Сообщение #5


Участник
**

Группа: Участник
Сообщений: 130
Регистрация: 13.5.2010
Из: Irkutsk
Пользователь №: 1712

Спасибо сказали: 11 раз(а)




Репутация:   1  


В общем это ютуб что-то чудит похоже,ибо скачал демку(из directx SDK),там тоже возможность загрузки на ютуб есть,и тоже не грузит у меня,кому не сложно,скачайте пример http://gamasutra.com/images/youtube_directx_11.zip (только винда разумеется) и попробуйте загрузить видео

с этим примером разобрался,теперь он нормально грузит,значит ошибка у меня в программе где-то всё-таки
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ernie
  опции профиля:
сообщение 13.12.2010, 13:03
Сообщение #6


Участник
**

Группа: Участник
Сообщений: 130
Регистрация: 13.5.2010
Из: Irkutsk
Пользователь №: 1712

Спасибо сказали: 11 раз(а)




Репутация:   1  


с bad request разобрался,тепрь запрос выглядит так:
request.setUrl(QUrl("http://uploads.gdata.youtube.com/feeds/api/users/default/uploads"));
    request.setRawHeader("Host","uploads.gdata.youtube.com");
    request.setRawHeader("Authorization","GoogleLogin auth="+auth);
    request.setRawHeader("GData-Version","2");
    request.setRawHeader("X-GData-Key","key=AI39si53w0jmcZxorzxniPVD_rGBRZJhShx6Bh7uKy-JmAn--BAKzINwR3lNzvOtqnClFlCRiXsk-j8UMaE-EAO9U-7EsDJRxg");
    request.setRawHeader("Slug","C:\\qwerty.avi");
    request.setRawHeader("Content-Type","multipart/related; boundary=\"f93dcbA3\"");
    request.setRawHeader("Connection","close");
    QByteArray reqString;
    reqString.append("--f93dcbA3\r\n");
    reqString.append("Content-Type: application/atom+xml; charset=UTF-8\r\n");
    reqString.append("\r\n");
    reqString.append("<?xml version=\"1.0\"?>\r\n");
    reqString.append("<entry xmlns=\"http://www.w3.org/2005/Atom\"\r\n");
    reqString.append("xmlns:media=\"http://search.yahoo.com/mrss/\"\r\n");
    reqString.append("xmlns:yt=\"http://gdata.youtube.com/schemas/2007\">\r\n");
    reqString.append("<media:group>\r\n");
    reqString.append("<media:title type=\"plain\">Test test</media:title>\r\n");
    reqString.append("<media:description type=\"plain\">\r\n");
    reqString.append("Batafa\r\n");
    reqString.append("</media:description>\r\n");
    reqString.append("<media:category ");
    reqString.append("scheme=\"http://gdata.youtube.com/schemas/2007/categories.cat\">People\r\n");
    reqString.append("</media:category>\r\n");
    reqString.append("<media:keywords>ara,arara</media:keywords>\r\n");
    reqString.append("</media:group>\r\n");
    reqString.append("</entry>\r\n");
    reqString.append("--f93dcbA3\r\n");
    reqString.append("Content-Type: video/*\r\n");
    reqString.append("Content-Transfer-Encoding: binary\r\n");
    reqString.append("\r\n");
    reqString.append(fileBinaryData.toBase64());
    reqString.append("\r\n");
    reqString.append("--f93dcbA3\r\n");
    request.setRawHeader("Content-Length",QString::number(reqString.length()).toUtf8());

но теперь после загрузки ютуб говорит,что не может отконвертировать видео
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ernie
  опции профиля:
сообщение 14.12.2010, 12:53
Сообщение #7


Участник
**

Группа: Участник
Сообщений: 130
Регистрация: 13.5.2010
Из: Irkutsk
Пользователь №: 1712

Спасибо сказали: 11 раз(а)




Репутация:   1  


Всё,сделал,вот полностью рабочий запрос.
QFile f("C:\\video.avi");            //video file
    f.open(QIODevice::ReadOnly);
    QByteArray fileBinaryData = f.readAll();
    f.close();
    QNetworkRequest request;
    request.setUrl(QUrl("http://uploads.gdata.youtube.com/feeds/api/users/default/uploads"));
    request.setRawHeader("Host","uploads.gdata.youtube.com");
    request.setRawHeader("Authorization","GoogleLogin auth="+auth);
    request.setRawHeader("GData-Version","2");
    request.setRawHeader("X-GData-Key","key=devkey");
    request.setRawHeader("Slug","C:\\video.avi");
    request.setRawHeader("Content-Type","multipart/related; boundary=\"f93dcbA3\"");
    request.setRawHeader("Connection","close");
    QByteArray reqString;
    reqString.append("--f93dcbA3\r\n");
    reqString.append("Content-Type: application/atom+xml; charset=UTF-8\r\n");
    reqString.append("\r\n");
    reqString.append("<?xml version=\"1.0\"?>\r\n");
    reqString.append("<entry xmlns=\"http://www.w3.org/2005/Atom\"\r\n");
    reqString.append("xmlns:media=\"http://search.yahoo.com/mrss/\"\r\n");
    reqString.append("xmlns:yt=\"http://gdata.youtube.com/schemas/2007\">\r\n");
    reqString.append("<media:group>\r\n");
    reqString.append("<media:title type=\"plain\">Test</media:title>\r\n");
    reqString.append("<media:description type=\"plain\">\r\n");
    reqString.append("Batafa\r\n");
    reqString.append("</media:description>\r\n");
    reqString.append("<media:category ");
    reqString.append("scheme=\"http://gdata.youtube.com/schemas/2007/categories.cat\">People\r\n");
    reqString.append("</media:category>\r\n");
    reqString.append("<media:keywords>ara,arara</media:keywords>\r\n");
    reqString.append("</media:group>\r\n");
    reqString.append("</entry>\r\n");
    reqString.append("--f93dcbA3\r\n");
    reqString.append("Content-Type: video/mpeg\r\n");
    reqString.append("Content-Transfer-Encoding: binary\r\n");
    reqString.append("\r\n");
    reqString.append(fileBinaryData);
    reqString.append("\r\n");
    reqString.append("--f93dcbA3\r\n");
    request.setRawHeader("Content-Length",QString::number(reqString.length()).toUtf8());
    netmen2 = new QNetworkAccessManager();
    netmen2->post(request,reqString);
    connect(netmen2, SIGNAL(finished(QNetworkReply*)), this, SLOT(handleUploadReply(QNetworkReply*)));
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 19.4.2024, 6:02