来自Qt Symbian 4.7的Facebook Wall(时间轴)帖子

时间:2012-03-24 13:23:14

标签: facebook qt symbian

我想制作一个可以在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());
        }
}

2 个答案:

答案 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。

或不要使用空格。