我的 Web 应用程序构建了对 Facebook 图形 API 的批处理请求。该批次是通过进行第一次 API 调用来获取用户的朋友而组成的。然后我遍历朋友列表并为每个人添加一个特定的请求(使用该用户的特定访问令牌)并将每个人添加到批处理中。所以它最终是两个 API 调用。不幸的是,它真的很慢,而且我听说 FQL 请求更快。
所以我的问题是,我可以用 FQL 做到这一点吗?我已经阅读了文档,但我不知道如何通过一个 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 );
查询有效,但有两个问题:
query3 返回所有用户 ID,而不仅仅是授权我的应用程序的用户 ID。
query4 不返回工作/教育字段...大概是因为 API 请求是使用当前用户的访问令牌调用的(而不是来自 query3 的特定用户的访问令牌)。我已经将授权用户的访问令牌存储在数据库中,但我不知道是否可以在这种情况下使用它们。
这可以用 FQL 完成吗?我可以在 FQL 多查询中定义唯一的访问令牌吗?