我想制作一个可以在Facebook墙上发布的简短应用(时间轴)。 我的应用程序基于webview组件(QWebView)来获取发布流的访问令牌
我可以使用访问令牌,但是当我尝试发布某些内容时,在我的Facebook上没有任何内容。
void MainWindow::on_pushButton_clicked(){
QUrl url("https://www.facebook.com/dialog/oauth");
url.addQueryItem("client_id","my_app_id");
url.addQueryItem("redirect_uri","https://www.facebook.com/connect/login_success.html");
url.addQueryItem("response_type","token");
url.addQueryItem("scope","read_stream,publish_stream");
MainWindow::browser->load(url);
MainWindow::browser->show();
}
void MainWindow::on_browser1_loadFinished(bool arg1)
{
QUrl url= browser->url();
QString strUrl = url.toString();
qDebug()<<"URL: "<<strUrl;
if( strUrl.contains(QString("access_token="), Qt::CaseSensitive)){
int sIndex = strUrl.indexOf("access_token=");
int eIndex = strUrl.indexOf("&expires_in");
QString mAccessToken= strUrl.mid(sIndex, eIndex - sIndex);
mAccessToken = mAccessToken.remove("access_token=");
qDebug()<<"TOKEN: + "<<mAccessToken;
QUrl params;
params.addQueryItem("access_token",mAccessToken);
params.addQueryItem("message","TEST !!");
params.addQueryItem("link","https://young-day-9284.herokuapp.com/");
params.addQueryItem("description","Testing");
params.addQueryItem("name","Test ");
params.addQueryItem("caption","Testing");
qDebug()<<"Mesajul trimis: "<<QString(params.encodedQuery());
QNetworkAccessManager mNetManager(this);
QNetworkRequest request(QUrl("https://graph.facebook.com/me/feed"));
//request.setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");
mNetManager.post(request,params.toString(QUrl::None).toAscii());
}
}
答案 0 :(得分:0)
将WebKit用于此类程序是过度的。 WebKit是一个完整的Web引擎,在内存使用和复杂性方面是一个非常重要的组件。
尝试查看Qt现有的各种OAuth实现。例如:https://github.com/ayoy/qoauth
QOauth甚至在doc目录中附带了一些示例代码。
答案 1 :(得分:0)
来自Qt doc:
void QUrl :: addQueryItem(const QString&amp; key,const QString&amp; value):
注意:此方法不会将空格(ASCII 0x20)编码为加号(+)符号,就像HTML表单一样。如果您需要这种编码,则必须自己编码值并使用 QUrl :: addEncodedQueryItem。
或不要使用空格。