我一直在努力寻找一种方法将twitter集成到我的跨平台qt项目中。 我想要实现的并不是什么花哨的东西。我只是希望能够使用Twitter API使用仅应用凭据来获取带有特定主题标签的推文。 为了做到这一点,我必须使用他们的oauth2身份验证过程获得持有者令牌。根据他们的开发页面,SSL是必需的。 https://dev.twitter.com/oauth/application-only
我已经读过,在QT中,我可以使用QNetworkAccessManager发送QNetworkRequests,但我似乎无法使其工作。我收到一个错误:“协议\”\“未知”
我已经尝试过很多帖子,但我无法得到我想要的东西。我将非常感谢能够使这一切成为可能的所有帮助。如果有人能指出我正确的方向/教程,请这样做:
附件是我的示例代码:
的.pro
QT += qml quick network
设置代码:
m_networkManager = new QNetworkAccessManager(this);
connect(m_networkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(requestFinished(QNetworkReply*)));
请求代码:
QJsonObject params;
params.insert("grant_type","client_credentials");
QUrl url("https://api.twitter.com/oauth2/token");
url.setHost("api.twitter.com");
QNetworkRequest request;
QString authorizationKey = m_consumerKey + ":" + m_consumerSecret;
request.setRawHeader("Authorization", "Basic "+ authorizationKey.toUtf8().toBase64());
request.setRawHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
m_networkManager->post(request, QJsonDocument(params).toJson());
最后我的回调:
void NetworkClass::requestFinished(QNetworkReply *reply)
{
cout << "header size: " + reply->readBufferSize();
if (reply->error() == QNetworkReply::NoError) {
//success
QByteArray response_data = reply->readAll();
QJsonDocument json = QJsonDocument::fromJson(response_data);
cout <<"result: " << response_data.toStdString();
}
else {
//failure
qDebug() << "Failure" <<reply->errorString();
}
reply->deleteLater();
}
注意:我对SSL等不太了解。我还是个新人。也许这就是为什么我现在感到如此失落。请帮帮我。感谢。
更新
@dutt指出我忘记将url设置为请求。 Yey!最后我收到了回复。但是,我收到了这个回复:
“传输https://api.twitter.com/oauth2/token时出错 - 服务器回复:禁止”
答案 0 :(得分:-1)
如果您可以使用Qt 5.8,则下一步可能会有所帮助:http://blog.qt.io/blog/2017/01/25/connecting-qt-application-google-services-using-oauth-2-0/和示例https://github.com/qt/qtnetworkauth/tree/5.8/examples/oauth/twittertimeline (未经我测试,但是官方的例子。)