私の Web アプリは、Facebook グラフ API へのバッチ リクエストを作成します。バッチは、ユーザーの友達を取得するための最初の API 呼び出しを行うことによって構成されます。次に、友達のリストをループして、それぞれに特定の要求を (そのユーザーの特定のアクセス トークンを使用して) 追加し、それぞれをバッチに追加します。つまり、2 つの API 呼び出しになります。残念ながら、これは非常に遅く、FQL リクエストの方が速いと聞いています。
私の質問は、FQLでこれを行うことができますか? ドキュメントを読みましたが、たとえば、1 つの FQL クエリで友人の仕事履歴 (各友人のアクセス トークンが必要) のすべての友人を返す方法がわかりません。これは可能ですか?もちろん、FQL リクエストのバッチ リクエストを作成することもできますが、それでは元の場所に戻ってしまいます。
更新: いくつかのテストを行ったところ、FQL は間違いなくバッチ リクエストよりも高速であるようです。私の FQL マルチクエリは次のようになります。
$multiQuery = array(
"query1"=>"SELECT uid2 FROM friend WHERE uid1 = me()", //LIST OF FRIEND IDs
"query2"=>"SELECT uid, name, work, education, is_app_user FROM user WHERE uid IN (SELECT uid2 FROM #query1)", //FRIEND PROFILES
"query3"=>"SELECT uid2 FROM friend WHERE uid1 IN (SELECT uid FROM #query2 WHERE is_app_user=1)",
"query4"=>"SELECT uid, name, work, education FROM user WHERE uid IN (SELECT uid2 FROM #query3)"
);
$multiQueryResult = $facebook->api(array(
'method' => 'fql.multiquery',
'queries' => $multiQuery
));
var_dump( $multiQueryResult );
クエリは機能しますが、2 つの問題があります。
query3 は、アプリを承認したユーザー ID だけでなく、すべてのユーザー ID を返します。
query4 は仕事/教育フィールドを返しません...おそらく API リクエストが現在のユーザーのアクセス トークンで呼び出されているためです (query3 の特定のユーザーのアクセス トークンとは対照的です)。承認されたユーザーのアクセス トークンを DB に保存しましたが、このコンテキストでそれらを使用できるかどうかはわかりません。
これはFQLで行うことができますか?? FQL マルチクエリ内で一意のアクセス トークンを定義できますか?