使用 PHP 和 facebook API 获取用户好友列表

Get user friends list using PHP and facebook API

所以我正在使用 CodeIgniter 框架并试图获得用户朋友。我在身份验证方面没有问题,但是当我尝试使用 https://graph.facebook.com/me/friends?fields=gender,id,name&access_token= 中的 GET 方法获取用户好友时,它 returns 我的数组是空的。这是前端代码

<script>
$(function () {
    FB.init({
        appId: ****, // App ID
        channelUrl: '', // Channel File
        status: true, // check login status
        cookie: true, // enable cookies to allow the server to access the session
        xfbml: true  // parse XFBML
    });
});

jQuery('*[data-action="doFbLogin"]').on('click', function () {
    FB.login(function (response) {
        if (response.authResponse) {

            FB.api('/me/friends', function(response) {

                // loading message
                var intervalLoading = 0;
                setInterval(function() {
                    intervalLoading = ++intervalLoading % 4;
                    jQuery('*[data-message="fb_loading"]').html("Connecting, please wait" + Array(intervalLoading + 1).join("."));
                }, 400);

                // request
                jQuery.post('http://www.****.***/ajax/fb_connect', {
                        "user_id": response.id,
                        "full_name": response.name,
                        "first_name": response.first_name,
                        "last_name": response.last_name,
                        "email": response.email,
                        "gender": response.gender,
                        "token": response.token,
                        "friends": response.friends,
                        "current_url": 'http://*****',
                        "ref_url": 'http://*****'
                    },
                    function (data) {
                        data = JSON.parse(data);
                        if (data == true) {
                            jQuery('*[data-message="fb_loading"]').removeAttr('data-message').html('Connected!');
                            location.reload();
                        } else {
                            jQuery('*[data-message="fb_loading"]').removeAttr('data-message').html('Connection failed!');
                            setTimeout(function(){
                                location.reload();
                            }, 2000);
                        }
                    }
                );
            });
        } else {
            console.log('something went wrong');
        }
    }, {scope: 'email'});
});

这是我的后端 - 连接:

$data = array(
        'fb-config' => array(
            'appId'  => FACEBOOK_API_ID,
            'secret' => FACEBOOK_SECRET
        )
    );

    $this->load->library('facebook', $data['fb-config']);
    $data['userData'] = $this->facebook->getUser();

    if ( $data['userData'] ) {
        try {
            $data['user_profile'] = $this->facebook->api('/me');
        } catch (FacebookApiException $e) {
            $data['user_profile'] = null; // return false, execution terminated.
            $this->facebook->destroySession();
        }
    }

$this->session->set_userdata(array('user_fb_token' => $this->facebook->getAccessToken()));
            print_r($this->users_model->getUserFacebookFriends());
            exit;

加好友方法:

public function getUserFacebookFriends()
{
    // get facebook friends (crawl)
    $graph_link = 'https://graph.facebook.com/me/friends?fields=gender,id,name&access_token=';
    $user_friends = file_get_contents($graph_link . $this->session->userdata('user_fb_token'));

    $friendsArray = json_decode($user_friends, true);

    if ( is_array($friendsArray) ) {
        $data = array('friendsArray' => $friendsArray['data']);
    } else {
        $data = array('friendsArray' => FALSE);
    }

    return $data;
}

所以我不知道为什么这不起作用,有什么建议吗?

结果正确。从v2.0开始,你只能获取授权过你App的好友:https://developers.facebook.com/docs/apps/changelog

这很可能是在 Whosebug 上被问得最多的问题,请在提问前使用搜索选项 (google, Whosebug)。这个线程中有一个非常详细的答案,例如:Facebook Graph Api v2.0+ - /me/friends returns empty, or only friends who also use my app

我遇到了同样的问题。您可以使用 FQL 获取好友列表。但是 FQL 已弃用 ,我认为将在 2-3 个月内被禁用。 使用 v2.0+,在隐私政策发生变化后,您可以获得 已经安装了您的应用程序的朋友列表(他们授予了您的应用程序权限)。 一般来说,在v2.0之前,根据隐私,用户对自己的账户和朋友账户负责。 v2.0之后,用户只对自己的资料负责。

在 v2.0 中,您只能收集朋友列表来向他们推荐您的应用,因此您必须改变推广应用的方式来收集朋友资料。

FQL documentation

请求看起来像:

GET /fql?q=SELECT+uid2+FROM+friend+WHERE+uid1=me()&access_token=...

查询当然可以修改,像这样(你可以add/remove字段甚至添加子查询):

SELECT+uid,+name,+first_name,+last_name,+pic_big,+birthday_date,+sex,+locale+FROM+user+WHERE+uid+IN+(SELECT+uid2+FROM+friend+WHERE+uid1=me())

但是 你的 account/application 必须在 2014 年注册(我希望我是正确的,但你可以查看文档)