如何在Facebook Graph API中获取友情详情?

时间:2011-02-02 11:39:12

标签: facebook facebook-graph-api

我怎样才能获得两个人的友谊细节?例如,在网络中它将是:

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

我有什么方法可以在Graph API中做到这一点?此外,我可以获得特定项目,如照片,我们之间的墙贴等吗? (没有记录AFAIK,但很多图谱API功能都不是......)

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

6 个答案:

答案 0 :(得分:6)

您可以通过执行多个FQL查询来模拟友谊查询。例如,要获得两个朋友A和B之间的所有照片,您可以:

  1. 从A
  2. 获取所有照片(p)
  3. 获取p中的所有B标签(在photo_tags表上查询)
  4. 获取B上的所有评论(在评论表上查询)
  5. 重复,这次选择B的照片。

    您可以将相同的概念应用于其他内容,例如帖子,视频,视频等。

答案 1 :(得分:3)

是的,我认为你也可以做同样的事情phillee用Graph API而不是FQL回答:

  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/
  7. 对于兴趣,电影,活动等,只需对两者(https://graph.facebook.com/ONEUSER/musichttps://graph.facebook.com/OTHERUSER/music)进行API调用,并找到两组数据的交集(循环遍历每个列表并保存所有数据)匹配单独的相互喜欢列表)

    虽然没有针对友谊的特定API调用,因此必须构建自己的。我的猜测是Facebook正在他们的友谊页面上做到这一点:)

    使用FQL和使用REST API一样容易......使用FQL可能更容易,因为您可以添加WHERE条件并获取所需的数据(SELECT * FROM comments WHERE fromid = FRIENDID),而不是通过排序API返回的大列表(除非有办法为API请求URL添加条件?)。

答案 2 :(得分:0)

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

使用Graph API(目前)无法直接进行此类查询。您需要从每个资源端点收集信息,然后根据自己的需要做一些相关的“查看友谊”

答案 3 :(得分: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()!

答案 4 :(得分: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)
      ...

答案 5 :(得分:-2)