如何在Facebook Graph API中获取好友详细信息?

14

我如何获取两个人之间的好友关系详细信息?例如在Web上:

http://www.facebook.com/<my_id>?and=<friend_id>

我能否在Graph API中实现这一点?此外,我能否获取特定项目,例如我们之间的照片、墙上的帖子等?(据我所知未经记录,但许多Graph API功能也无法记录...)

编辑:我认为使用Graph API应该是可能的。例如,获取家庭详细信息(兄弟姐妹、父母等)尚未记录,但我仍然可以做到。


我一直在查看图形API,但在文档中找不到有关好友页面的任何信息。这可能是此问题的重复。 - Nemo
是的,它看起来确实像一个类似的问题。我们如何决定关闭哪一个?我们可以合并吗? - Enrico Susatyo
你说得对,这是重复的问题。我投票将我的问题合并到这个问题中。(不过需要更多的投票才能实际发生。) - bantic
我也没有投票的权利,所以必须由其他人来投票。 - Enrico Susatyo
6个回答

6
您可以通过进行多个FQL查询来模拟友谊查询。例如,要获取两个朋友A和B之间的所有照片,您可以执行以下操作:
  1. 从A获取所有照片(p)
  2. 在p中获取B的所有标签(在photo_tags表上查询)
  3. 在p上查询B发表的所有评论(在comments表上查询)
重复以上步骤,这次选择来自B的照片。
您可以将相同的概念应用于其他内容,例如帖子、赞、视频等。

有没有一种非FQL的方法来做这件事? - Enrico Susatyo

3

是的,我认为您也可以使用Graph API而不是FQL来完成相同的操作,就像phillee所回答的那样:

  1. 获取用户照片 https://graph.facebook.com/USERID/photos
  2. 获取每张照片的标签 https://graph.facebook.com/PHOTOID/tags
  3. 浏览照片标签列表,并抓取所有包含好友的照片
  4. 获取每张照片的评论 https://graph.facebook.com/PHOTOID/comments
  5. 浏览照片评论列表,并抓取好友留下的所有评论
  6. 正如其他答案所说:对于您想要的所有数据进行重复操作
    1. https://graph.facebook.com/USERID/feed
    2. https://graph.facebook.com/USERID/posts
    3. 等等,查看这里的所有连接:http://developers.facebook.com/docs/reference/api/user/

对于兴趣、电影、活动等,只需调用API(https://graph.facebook.com/ONEUSER/musichttps://graph.facebook.com/OTHERUSER/music),并找到两组数据的交集(遍历每个列表并将所有匹配项保存到一个单独的互相喜欢列表中)

虽然没有特定的API调用来获取好友关系,但您需要自己构建。我猜Facebook在他们的友谊页面上也是这样做的 :)

使用FQL和REST API一样容易...甚至更容易,因为您可以添加WHERE条件并仅返回所需的数据(SELECT * FROM comments WHERE fromid = FRIENDID),而不是浏览API返回的大列表(除非有一种方法将条件添加到API请求URL中?)。


使用Graph API,您需要针对每个对象单独查询标签和评论,这可能会非常昂贵。使用FQL,您可以使用子查询,因此您只需运行一个查询来获取所需类型的对象。 - phillee

0

获取被两个(或更多)用户标记的照片:

SELECT pid, src_big FROM photo 
    WHERE pid IN(
          SELECT pid FROM photo_tag WHERE subject=me()) 
      AND pid IN(
          SELECT pid FROM photo_tag WHERE subject=FRIEND_ID)
      AND pid IN(
          SELECT pid FROM photo_tag WHERE subject=ANOTHER_FRIEND_ID)
      ...

0

如果我理解正确,您想要“查看友谊”

目前,使用Graph API直接查询此类信息是不可能的。您需要从每个资源端点收集信息,然后在自己的部分进行一些关联才能“查看友谊”。


0

这是我一直在使用的:

<?php
function main()
{
    global $Fb;
    $Fb = new Facebook(array('appId'=>FB_API_ID,'secret'=>FB_API_SECRET));
    $logoutUrl = $Fb->getLogoutUrl();
    $loginUrl = $Fb->getLoginUrl();
    $user = fb_loguser($Fb);
    if ($user)
    {
        $txt .= "<p align=\"center\"><a href=\"" . $logoutUrl . "\">Logout</a></p>";
        $txt .= "<h3 align=\"center\">You</h3>";
        $access_token = $Fb->getAccessToken();
        $user_profile = $Fb->api('/me');
        $txt .= "<p align=\"center\">
            <img src=\"https://graph.facebook.com/".$user."/picture\"></p>";
        $txt .= fb_friends_list($user_profile,$access_token);
    }
}   
function fb_loguser($facebook)
{
    global $Fb;
    $Fb = $facebook;
    $user = $Fb->getUser();
    if ($user) 
    {
        try
            $user_profile = $Fb->api('/me');
        catch (FacebookApiException $e) 
        {
            error_log($e);
            $user = null;
        }
    }
    return($user);
}
function fb_friends_list($access_token)
{
    global $Sess,$Fb;
    $friends = $Fb->api('/me/friends'); // return an array [data][0 to n][name]/[id]
    $siz = sizeof($friends['data']);
    $txt  = "<h3>Your FRIENDS on FACEBOOK</h3>";
    $txt .= "<table>";
    for ($i=0; $i<$siz; $i++)
    {
        $fid = $friends['data'][$i]['id'];
        $src = "http://graph.facebook.com/".$fid."/picture";
        $txt .= "<tr><td><img src=\"".$src."\" /></td>";
        $txt .= "<td>".$friends['data'][$i]['name'] . "</td>";
        $txt .= "<td>" . $fid . "</td></tr>";   
    }
    $txt .= "</table>";
    return($txt);
}
?>

调用 main()!


这里有一个注释:它只是列出了你所有的朋友。 :-) - Bondt

-2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接