使用FQL检索朋友照片

时间:2013-03-10 11:09:42

标签: facebook facebook-fql photos

我正在构建一个使用Facebook好友用户图片的产品。我在SO上找到了多个示例,通过过滤专辑和用户朋友列表来过滤照片,如下所示:

SELECT pid, link, owner
FROM photo
WHERE aid IN 
  (SELECT aid FROM album WHERE owner IN 
    (SELECT uid2 FROM friend WHERE uid1=me()) 
  )

但为什么我不能跳过专辑收藏?以下应该可以工作,但在Graph API Explorer中运行它永远不会返回结果(如永不发生的超时):

SELECT pid, link, owner
FROM photo
WHERE owner IN (SELECT uid2 FROM friend WHERE uid1=me())
AND created > strtotime("10 February 2013")
ORDER BY created DESC

我使用的令牌肯定有'user_photos'和'friends_photos'。使用常规图形资源管理器也具有相同的行为,没有显示任何结果:

enter image description here

这是我的逻辑错误,Facebook平台的错误,还是有什么奇怪的事情发生在这里?

1 个答案:

答案 0 :(得分:1)

说到:

SELECT pid, link, owner
FROM photo
WHERE owner IN (SELECT uid2 FROM friend WHERE uid1=me())
AND created > strtotime("10 February 2013")
ORDER BY created DESC
  • 首先,此查询超时。
  • 其次,FQL查询只能提供5000个结果,而我们的朋友上传的照片远不止这些。
  • 第三,你试图改进第一个不起作用的查询(在我的情况下,它只发现了我朋友的照片中的1470个)。
  • 第四,即使您的第二个查询不会超时,如果它可以提供超过5000个结果,此查询也不会提供用户朋友的所有照片。因为这个查询:

    SELECT pid, link, owner FROM photo WHERE owner=USER_ID 仅提供用户的最后100张照片,而用户可以拥有2000张照片。

至少,我们不必更正您的查询,但我们应该尝试创建一个新查询。我们的目标不是在制作复杂的查询时尽可能少地进行查询,而是要做出明确有效的查询。

首先,让我们尝试获取一个用户的所有照片。

SELECT pid, link, owner
FROM photo
WHERE owner=USER_ID
AND created > strtotime("10 February 2013")
ORDER BY created DESC
LIMIT 5000 OFFSET 0

现在我们不再拍100张照片,而是5000张!

其次,我们得到所有朋友用户:

SELECT uid2 FROM friend WHERE uid1=me() LIMIT 5000

用户的最大朋友数量确实是5000。

现在,您所要做的就是:

  1. 发出一个获取用户好友列表的请求。
  2. 循环到每个朋友身上,并为每个朋友提出一个请求,以便检索他们的照片。 IF 照片数量不小于5000,这意味着用户仍然会有一些照片要显示。然后,您必须在将OFFSET增加5000的同时发出另一个请求!

  3. 现在您一定会收到所有用户朋友的照片!此外,将此过程分解为多个较小的请求并不是一件坏事;您将能够知道查询的进度,您可以将其呈现为AJAX中的进度条。这可能是一件好事,因为它需要很多的时间!