2012-03-24 2 views
0

Я хочу сделать короткое приложение, которое может размещаться на моей стене Facebook (временная шкала). Мое приложение основано на компоненте webview (QWebView), чтобы получить токен доступа для потока публикации.Facebook Wall (timeline) сообщение от Qt Symbian 4.7

Я могу воспользоваться маркером доступа, но когда я пытаюсь отправить что-то, на моем 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

Использование WebKit для такого рода программ является излишним. WebKit - это полноценный веб-движок и довольно тяжелый компонент с точки зрения использования и сложности памяти.

Попробуйте взглянуть на различные реализации OAuth, которые существуют для Qt уже. Например: https://github.com/ayoy/qoauth

QOauth даже отправляет код примера в каталог doc.

+0

Не работает. Я сделал тот же сценарий в java и работал. Я установил прокси-сервер приложения для HTTP-прокси (я за прокси-сервером). Я пробовал за пределами прокси-сервера, публичного IP-адреса и того же результата .... – dnp

+0

Что именно не сработало? Может ли ваше приложение вообще подключаться к Интернету? – ahf

+0

Да, я могу сделать http-запрос, но когда я попытался сделать https (в данном случае), это не сработает. Я ссылаюсь на свой проект LIBS + = -llibcrypto для открытого ssl lib, но тот же результат ... Https-запросы отлично работают с веб-браузером. Я думаю, что есть проблема с прокси-сервером и https – dnp

0

С Qt Doc:

аннулируются QUrl :: addQueryItem (Const QString & ключ, Const QString & значение):

Примечание: Этот метод не кодирует пробелы (ASCII 0x20), как плюс (+), как и HTML-формы. Если вам нужна такая кодировка, вы должны закодировать значение самостоятельно и использовать QUrl :: addEncodedQueryItem.

или не использовать пробелы.