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



我想使用图形api和打开的图形2操作来做一些类似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中有大量对象,我必须进行分页,进行更多的查询(我尽量减少查询数量)

你看到更好的方法了吗?

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

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

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

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

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

如果derickito给出的答案还不够,你应该探索将你的应用程序放在Facebook白名单上(也就是成为合作伙伴),以获得一些可能存在此功能的专用Graph API,但不适用于使用公共Graph API的"正常"应用程序。

最新更新