2012-03-24 5 views
0

Je veux faire une application courte qui peut poster sur mon mur Facebook (timeline). Mon application est basée sur le composant webview (QWebView) pour obtenir le jeton d'accès pour le flux de publicationFacebook Wall (timeline) poste de Qt Symbian 4.7

Je peux prendre le jeton d'accès mais quand j'essaye de poster quelque chose, sur mon Facebook rien n'apparaît.

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()); 
     } 
} 

Répondre

0

L'utilisation de WebKit pour ce type de programme est exagérée. WebKit est un moteur Web complet et est un composant assez lourd en termes d'utilisation de la mémoire et de complexité. Essayez d'examiner les différentes implémentations OAuth qui existent déjà pour Qt. Par exemple: https://github.com/ayoy/qoauth

QOauth est livré avec un exemple de code dans le répertoire doc.

+0

Ne fonctionne pas. J'ai fait le même scénario en Java et fonctionne. J'ai mis le proxy d'application au proxy HTTP (je suis derrière un serveur proxy). J'ai essayé à l'extérieur du serveur proxy, sur IP publique et le même résultat .... – dnp

+0

Qu'est-ce qui n'a pas fonctionné exactement? Votre application est-elle capable d'établir des connexions à Internet? – ahf

+0

Oui, je peux faire une requête http, mais quand j'ai essayé de faire https (dans ce cas) ne fonctionne pas. Je lie à mon projet LIBS + = -llibcrypto pour open ssl lib, mais le même résultat ... Les requêtes Https fonctionnent bien avec le navigateur web. Je pense qu'il y a un problème avec le serveur proxy et https – dnp

0

A partir de Qt doc:

vide qurl :: addQueryItem (const QString & clé, const QString valeur &):

Note: Cette méthode ne code pas pour des espaces (0x20 ASCII), plus (+) les signes, comme les formulaires HTML. Si vous avez besoin de ce type d'encodage, vous devez encoder la valeur vous-même et utiliser QUrl :: addEncodedQueryItem.

ou d'utiliser des espaces.