1

QT フレームワークを使用してマルチクエリを実行しようとしています。私のクエリは次のようになります

{"query1":"SELECT uid2 FROM friend WHERE uid1=me()","query2":"SELECT uid, name FROM user WHERE uid in(SELECT uid2 FROM #query1)"}

これまで、「#query1」メソッドを使用しない場合は機能することを発見しました。しかし、実際のクエリはより複雑であるため、アプリケーションでそれが必要です。

貼り付けたら

https://api.facebook.com/method/fql.multiquery?format=json&queries=%7B%22query1%22%3A%22SELECT%20uid2%20FROM%20friend%20WHERE%20uid1%3Dme%28%29%22%2C%22query2%22%3A%22SELECT%20uid%2C%20name%20FROM%20user%20WHERE%20uid%20in%28SELECT%20uid2%20FROM%20%23query1%29%22%7D&access_token=xxxxxxxxxxxxx

access_token が有効なものであるブラウザのアドレス バー内で、応答が得られます。

QT から同じリクエストを行うと、空の json リスト ( "[ ]" ) が返されます。

QTコードは次のとおりです。

//this is just a markup, the read deal works

QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QNetworkRequest request;

url="https://api.facebook.com/method/fql.multiquery?format=json&queries=%7B%22query1%22%3A%22SELECT%20uid2%20FROM%20friend%20WHERE%20uid1%3Dme%28%29%22%2C%22query2%22%3A%22SELECT%20uid%2C%20name%20FROM%20user%20WHERE%20uid%20in%28SELECT%20uid2%20FROM%20%23query1%29%22%7D&access_token=xxxxxxxxxxxxx";

request.setRawHeader("Content-Type","application/x-www-form-urlencoded");

request.setUrl(url);

reply=manager->get(request);
connect(manager, SIGNAL(finished(QNetworkReply*)),
             this, SLOT(replyFinished(QNetworkReply*)));


void replyFinished(QNetworkReply *r){

qDebug()<<r->readAll();

}

これは現在「[ ]」を出力しています。次のような単純なURLを使用する場合

http://graph.facebook.com/me/friends?access_token=xxxxxxxxx

それはうまく動作します。

  • それで、私は何が欠けていますか?

  • ブラウザの get リクエストと QT の get リクエストに違いがあるためですか?

  • HTTP get 要求のヘッダーを構成する必要がありますか? もしそうなら、どのような
    価値がありますか?

前もって感謝します

4

1 に答える 1

0

URL は既にエンコードされているため、 を使用QUrl::setEncodedUrl()して設定するか、QUrlエンコードさせてください:

url = "https://api.facebook.com/method/fql.multiquery?format=json&queries={\"query1\":\"SELECT uid2 FROM friend WHERE uid1=me()\",\"query2\":\"SELECT uid, name FROM user WHERE uid in(SELECT uid2 FROM #query1)\"}&access_token=xxxxxxxxxxxxx";  
于 2012-03-24T01:32:27.500 に答える