检索在打开的图形2中对自定义对象执行自定义操作的朋友列表

时间:2012-02-09 15:51:48

标签: api facebook-graph-api facebook-opengraph facebook-social-plugins open-graph-beta

我想使用带有开放图形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" }
]

这是非常低效的,并且从那时起就没有完全解决我的问题:

  • 我仍然需要过滤结果才能获得匹配的结果 我想要的对象
  • 如果命名空间中有大量对象:testaction,我必须经过分页,进行更多查询(我尽量减少查询次数)

你认为有更好的方法吗?

3 个答案:

答案 0 :(得分:6)

这可能不是你想要的,但鉴于facebook(AFAIK)没有提供(并且可能永远不会提供)这样做的能力。我认为您应该自己存储信息,然后从您自己的数据库中查询数据。这就像你在问题中所做的那样,但你可以优化它,因为它是你的数据库。

我确定你已经考虑过了,但有人不得不说出来。

答案 1 :(得分:3)

如果回答derickito给出的还不够,你应该探索将你的应用程序放在Facebook白名单(也称为合作伙伴)上,以获得可能存在此功能的私有Graph API,但不适用于“正常的“使用公共Graph API卡住的应用程序。

答案 2 :(得分:3)

现在可以使用一个Graph API请求执行此操作:

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

请参阅field expansionupdates to the graph API