【问题标题】:How do you retrieve a photo or photos containing only one tagged user using either FQL or Graph API?如何使用 FQL 或 Graph API 检索仅包含一个标记用户的照片或照片?
【发布时间】:2012-05-22 01:49:04
【问题描述】:

我已尝试使用 FQL 和 Graph API 来完成此操作。

我首先尝试了这个 FQL 调用:

$fql = "SELECT pic, src_big FROM photo WHERE pid IN (SELECT pid FROM photo_tag WHERE subject = me())";

我收到的结果包括包含给定用户标签的图像(在本例中:me())。但是,这些图像可能包括不止一个标记的用户。我希望通过使用 SQL HAVING 子句和 COUNT (http://stackoverflow.com/a/3710501/1406986) 来解决这个问题。不幸的是,我认为 FQL 不支持此功能,因为当我尝试此调用时:

$fql = "SELECT pic, src_big FROM photo WHERE pid IN (SELECT pid FROM photo_tag HAVING COUNT(subject) = 1";

我收到了来自 Facebook 的错误消息。如果 FQL 实际上支持此功能,请纠正我。

为了尝试使用 Graph API 解决这个问题,我提出了以下请求:

$userPics = $facebook->api('/me/photos');

这会返回用户的照片,但是,从这一点开始,我不得不遍历每张照片,寻找只包含一个标签的照片。我发现这是不切实际的,例如,如果我需要为用户的每个朋友找到只包含他们的朋友而不包含其他朋友的图像。为此,我需要单独检索他们每个朋友的所有照片,然后遍历所有照片。

我仍在寻找一个好的解决方案。请发表您的想法和解决方案。

【问题讨论】:

    标签: facebook facebook-graph-api tags facebook-fql photos


    【解决方案1】:

    我已经设法为这个问题创建了一个 FQL,但它一点也不漂亮

    SELECT object_id, pid, src_big FROM photo WHERE pid IN
      (SELECT pid FROM photo_tag 
        WHERE pid IN (SELECT pid FROM photo_tag WHERE subject = me()) 
        AND NOT (pid IN 
          (SELECT pid  FROM photo_tag WHERE pid IN 
            (SELECT pid FROM photo_tag WHERE subject = me()) 
          AND subject != me())
        )
      )
    

    说明:

    第一个很简单,获取当前用户的photo_tags

    SELECT pid FROM photo_tag WHERE subject = me()
    

    下一张我加入同一张桌子,但这一次我想要我和某人在一起的照片

    SELECT pid  FROM photo_tag WHERE pid IN 
      (SELECT pid FROM photo_tag WHERE subject = me()) 
    AND subject != me()
    

    我再次加入同一张桌子(是的 3 次加入同一张桌子),但这次我想要我是主题的照片标签 AND 不在我之前得到的列表中(我是某人的主题的照片),因此此查询返回所有 photo_tags,其中用户是该照片中唯一标记的人

    SELECT pid FROM photo_tag 
    WHERE pid IN (SELECT pid FROM photo_tag WHERE subject = me()) 
       AND NOT (pid IN 
         (SELECT pid  FROM photo_tag WHERE pid IN 
            (SELECT pid FROM photo_tag WHERE subject = me()) 
          AND subject != me())
       )
    

    查询的最后一个添加只是一个从照片的照片表中获取信息的连接,如果我是唯一被标记的人

    SELECT object_id, pid, src_big FROM photo WHERE pid IN
      (SELECT pid FROM photo_tag 
        WHERE pid IN (SELECT pid FROM photo_tag WHERE subject = me()) 
        AND NOT (pid IN 
          (SELECT pid  FROM photo_tag WHERE pid IN 
            (SELECT pid FROM photo_tag WHERE subject = me()) 
          AND subject != me())
        )
      )
    

    【讨论】:

    • 感谢您的解决方案法比奥!我在 FQL 资源管理器中查看了这个,它运行良好。现在,如果只有用户会完全标记包含多人的照片,或者如果有某种方法也可以过滤掉这些图像......哈哈
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多