22

我想使用带有打开图 2 操作的图 api 来做类似 facepile 的事情:从自定义对象和自定义对象,给我朋友(使用我的 facebook 应用程序)在这个对象上执行此操作。

问题是使用 FQL,我无法查询自定义对象和操作。使用图形 API,我找不到将朋友列表与我感兴趣的对象相交的方法。

我能做的最好的事情是使用图形 API 的批处理模式进行以下操作:

batch=[
  // First we get the list of friends that are using my facebook application
  { "method": "GET", "relative_url": "fql?q=SELECT+uid+FROM+user+WHERE+uid+IN+(SELECT+uid1+FROM+friend+WHERE+uid2=me())+AND+is_app_user=1+LIMIT+0,49", "name": "friends"},
  // Then query each friend to get the list of objects that went through my namespace:testaction
  { "method": "GET", "relative_url": "{result=friends:$.data.0.uid}/namespace:testaction" },
  { "method": "GET", "relative_url": "{result=friends:$.data.1.uid}/namespace:testaction" },
  ...
  { "method": "GET", "relative_url": "{result=friends:$.data.49.uid}/namespace:testaction" }
]

这是非常低效的,并且不能完全解决我的问题,因为:

  • 我仍然必须过滤结果以仅获得与我想要的对象匹配的结果
  • 如果 namespace:testaction 中有大量对象,我必须通过分页,做更多的查询(我尽量减少查询的数量)

你有没有更好的方法来做到这一点?

4

3 回答 3

6

这可能不是您正在寻找的,但鉴于 facebook (AFAIK) 不提供(并且可能永远不会提供)执行此操作的能力。我认为您应该简单地自己存储信息,然后从自己的数据库中查询数据。这就像您在问题中所做的那样,但是您可以优化它,因为它是您的数据库。

我敢肯定你已经想到了这一点,但有人不得不说。

于 2012-02-13T21:22:11.280 回答
3

如果 derickito 给出的答案还不够,您应该探索将您的应用列入 Facebook 白名单(也就是成为合作伙伴),以获取一些可能存在此功能但不适用于“普通”应用的私有 Graph API使用公共 Graph API 卡住了。

于 2012-02-15T16:05:06.400 回答
3

现在可以通过一个 Graph API 请求来做到这一点:

GET https://graph.facebook.com/me/friends?limit=50&fields=name,namespace:testaction.limit(100)

请参阅图形 API 的字段扩展更新

于 2012-09-03T13:36:44.760 回答