使用最新的API获取Facebook好友列表

25

我正在使用最新版本的Facebook SDK(它允许连接到一个叫做“图形API”的东西,但我不确定)。我已经修改了Facebook的示例代码,让我能够连接到Facebook并且这个可以运行……但是我无法获取我的朋友列表。

$friends = $facebook->api('friends.get');

这会产生错误信息:“致命错误:未捕获的OAuthException:(#803)请求的一些别名不存在:friends.get,位于/ mycode / facebook.php的第543行抛出”。

不知道为什么或者那是什么意思。有人能告诉我获取好友列表的正确语法(用最新的Facebook API)吗?(我尝试了“$friends = $facebook->api->friends_get();”,但是得到了另一个错误,“致命错误:在/mycode/example.php的第129行调用非对象成员函数friends_get()”。)

我可以确认在我的代码中,在此之前的所有内容都很好:我已连接到Facebook并拥有有效的会话,并且可以获取我的信息并将其转储到屏幕上...即此代码在失败的friends.get调用之前完美执行:

$session = $facebook->getSession();
if ($session) {
    $uid = $facebook->getUser();
    $me = $facebook->api('/me');
}
print_r($me);
11个回答

58

我认为这就是你想要的:

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

你知道如何通过 API 调用获取某人的个人资料图片吗?就像这样... $friends = $facebook->api('/idofosmefriend/picture'); 还有一些包含所有这些调用的文档吗?谢谢! - José Joel.
@nfvs,你知道我怎么才能访问friends_hometown吗? - alex
13
这个方法已经无法在Graph API v2或旧版Graph API v1的应用中使用。详情请参考:https://developers.facebook.com/docs/graph-api/reference/v2.0/user/friends“这个方法只会返回那些使用(通过Facebook登录)请求该应用的用户的好友。” - dwp4ge

23

这是获取你在Facebook上的朋友的PHP代码的实时版本。

<?php
    $user = $facebook->getUser();


    if ($user) {
        $user_profile = $facebook->api('/me');
        $friends = $facebook->api('/me/friends');

        echo '<ul>';
        foreach ($friends["data"] as $value) {
            echo '<li>';
            echo '<div class="pic">';
            echo '<img src="https://graph.facebook.com/' . $value["id"] . '/picture"/>';
            echo '</div>';
            echo '<div class="picName">'.$value["name"].'</div>'; 
            echo '</li>';
        }
        echo '</ul>';
    }
?>

文档显示,它展示了也在使用您的应用的朋友。我已经尝试了上面的代码并得到了结果。请查看他们的链接:(检查read_friendlists部分)https://developers.facebook.com/docs/facebook-login/permissions/v2.2 - Web_Developer

12

像@nfvs所描述的那样获取朋友是一个好方法。它输出了一个带有id和name属性(按照id排序)的多维数组,你可以这样查看朋友的照片:

foreach ($friends as $key=>$value) {
    echo count($value) . ' Friends';
    echo '<hr />';
    echo '<ul id="friends">';
    foreach ($value as $fkey=>$fvalue) {
        echo '<li><img src="https://graph.facebook.com/' . $fvalue->id . '/picture" title="' . $fvalue->name . '"/></li>';
    }
    echo '</ul>';
}

工作了!谢谢,只有一行代码在第二个foreach循环中出错了...我将其更改为以下内容,这样它就对我起作用了:echo '<li><img src="https://graph.facebook.com/' . $fvalue->id . '/picture" title="' . $fvalue->name . '"/></li>'; - Stevanicus
它按照您的建议正常工作,并在代码中进行了更新。谢谢Stevanicus和Geoffa。 - Elankeeran

7
提醒一下所有使用Graph API v2.0并遇到这个问题的人:此方法已经不再适用。在v2.0中,调用“/me/friends”只会返回该用户在应用程序中使用过的好友列表:
  • 需要一个带有user_friends权限的用户访问令牌才能查看当前用户的好友。
  • 这将仅返回通过Facebook登录使用了请求所在应用程序的任何朋友。
  • 如果某个人的好友拒绝了user_friends权限,则该朋友将不会出现在此人的好友列表中。

2
有没有办法使用2.0 Graph API获取所有好友的列表? - Eric

3
如果您想使用REST端点,
$friends = $facebook->api(array('method' => 'friends.get'));

如果您正在使用Graph API,那么请使用以下代码:
$friends = $facebook->api('/me/friends');

3
在最近版本的Facebook SDK中,由于安全原因,Facebook已禁用了访问某人好友列表的功能...请查看文档以了解更多信息...

2
使用FQL吧,它类似于SQL,但是专门用于Facebook的数据表,并且轻松涵盖了您想要进行的数据查询。 您将不必使用所有那些/xx/xxx/xx调用,只需知道您感兴趣的表格和列即可。
$myQuery = "SELECT uid2 FROM friend WHERE uid1=me()";
$facebook->api( "/fql?q=" . urlencode($myQuery) )

http://developers.facebook.com/docs/reference/fql/上有很棒的互动示例。


0
使用CodeIgniter OAuth2/0.4.0 sparks,在Auth.php文件中。
$user = $provider->get_user_info($token);

$friends = $provider->get_friends_list($token);
print_r($friends);

在 Provider 文件夹下的 Facebook.php 文件中,添加以下函数:
    public function get_friends_list(OAuth2_Token_Access $token)
    {
            $url = 'https://graph.facebook.com/me/friends?'.http_build_query(array(
                    'access_token' => $token->access_token,
            ));
            $friends = json_decode(file_get_contents($url),TRUE);

            return $friends;
    }

prints the facebenter code hereook friends.

0
friends.get

获取好友列表的函数

是的,这是最好的。

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

    echo '<ul>';
    foreach ($friends["data"] as $value) {
        echo '<li>';
        echo '<div class="pic">';
        echo '<img src="https://graph.facebook.com/' . $value["id"] . '/picture"/>';
        echo '</div>';
        echo '<div class="picName">'.$value["name"].'</div>'; 
        echo '</li>';
    }
    echo '</ul>';

0

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