0

我的 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 );

查询有效,但有两个问题:

  1. query3 返回所有用户 ID,而不仅仅是授权我的应用程序的用户 ID。

  2. query4 不返回工作/教育字段...大概是因为 API 请求是使用当前用户的访问令牌调用的(而不是来自 query3 的特定用户的访问令牌)。我已经将授权用户的访问令牌存储在数据库中,但我不知道是否可以在这种情况下使用它们。

这可以用 FQL 完成吗?我可以在 FQL 多查询中定义唯一的访问令牌吗?

4

2 回答 2

0

朋友工作历史的所有朋友(需要每个朋友的访问令牌)

如果您需要不同的访问令牌,那么显然无法在一个请求中完成……但是,如果我的每个朋友最近都没有与您的应用程序进行交互,那么您从哪里获得访问令牌呢?如果他们愿意的话,您可以已经获得他们的工作信息并将其放入您自己的数据库中,这样您就可以从那里获取它,只需使用我朋友的 uid 进行查找。否则,我认为这不是你要走的路。

宁愿这样:

如果您的用户的朋友已经设置了他们的隐私设置,以便他们愿意与您的用户正在使用的应用程序共享他们的工作信息,那么您可以获得该信息,而无需为每个朋友提供单独的访问令牌。然后你会像这样做一个 FQL 查询,

SELECT uid, name, work FROM user WHERE uid IN
  (SELECT uid1 FROM friend WHERE uid2 = me())

这将为您提供用户朋友的工作信息——但显然仅适用于那些愿意与朋友正在使用的应用程序共享该信息的人。

于 2012-06-16T11:37:37.133 回答
0

这并不是我原来问题的真正答案,因为似乎没有。似乎在撰写本文时,Facebook 批处理请求真的很慢......这太糟糕了,因为这基本上违背了它的全部目的。

于 2012-06-24T18:56:08.180 回答