Last active
May 4, 2016 10:01
-
-
Save zqsd/5170142 to your computer and use it in GitHub Desktop.
Sketchfab API C++/Qt example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Compiling: | |
qmake -project "QT += core network script" | |
qmake | |
make | |
*/ | |
#include <iostream> | |
#include <QApplication> | |
#include <QDebug> | |
#include <QFile> | |
#include <QHttpMultiPart> | |
#include <QProgressDialog> | |
#include <QUrl> | |
#include <QNetworkAccessManager> | |
#include <QNetworkReply> | |
#include <QNetworkRequest> | |
#include <QScriptEngine> | |
QHttpPart part_parameter(QString key, QString value) { | |
QHttpPart part; | |
part.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"" + key + "\"")); | |
part.setBody(value.toAscii()); | |
return part; | |
} | |
int main(int argc, char* argv[]) | |
{ | |
QApplication application(argc, argv); | |
QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType); | |
// upload parameters data | |
multiPart->append(part_parameter("title", "Uber Glasses")); | |
multiPart->append(part_parameter("description", "Test of the api with a simple model")); | |
multiPart->append(part_parameter("tags", "test collada glasses")); | |
multiPart->append(part_parameter("token", "ff00ff")); | |
multiPart->append(part_parameter("private", "1")); | |
multiPart->append(part_parameter("password", "Tr0b4dor&3")); | |
// upload file data | |
QHttpPart modelPart; | |
modelPart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/octet-stream")); | |
modelPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"fileModel\"; filename=\"./model.dae\"")); | |
QFile *file = new QFile("model.dae"); | |
file->open(QIODevice::ReadOnly); | |
modelPart.setBodyDevice(file); | |
file->setParent(multiPart); | |
multiPart->append(modelPart); | |
QUrl url("https://api.sketchfab.com/v1/models"); | |
QNetworkRequest request(url); | |
QNetworkAccessManager manager; | |
QNetworkReply *reply = manager.post(request, multiPart); | |
multiPart->setParent(reply); | |
qDebug() << "Transmitting" << file->size() << "bytes file."; | |
QObject::connect(reply, SIGNAL(finished()), &application, SLOT(quit())); | |
int res = application.exec(); | |
// test for network error | |
QNetworkReply::NetworkError err = reply->error(); | |
if (err != QNetworkReply::NoError) { | |
qDebug() << reply->errorString(); | |
return 1; | |
} | |
// get the api anwser | |
QByteArray result = reply->readAll(); | |
QScriptValue sc; | |
QScriptEngine engine; | |
qDebug() << "Result:" << result; | |
sc = engine.evaluate("(" + QString(result) + ")"); | |
if (sc.property("success").toString() == "true") { | |
qDebug() << "Model uploaded with id" << sc.property("result").property("id").toString(); | |
} else { | |
qDebug() << "Model failed to upload with error" << sc.property("error").toString(); | |
} | |
return res; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment