使用facebook graph api访问测试用户数据

时间:2011-11-23 17:02:35

标签: facebook-graph-api oauth facebook-oauth

我正在尝试使用facebook graph api获取测试用户的朋友,但它只返回朋友的ID,但不返回其他详细信息,如first_name,last_name等。这适用于真实用户。我特意传递了我需要的字段(请求看起来像这样):

https://graph.facebook.com/me/friends?access_token=...&fields=id%2Cfirst_name%2Clast_name%2Cgender%2Clocale%2Clink%2Clocation%2Cbirthday%2Creligion%2Crelationship_status

访问令牌是测试用户登录我的应用程序时授予测试用户的令牌。

我发现了类似的SO帖子,但我不确定建议的解决方案是什么。

Query test users through Facebook Graph API

1 个答案:

答案 0 :(得分:1)

您需要使用应用access_token,这可以通过执行以下操作在图谱API资源管理器中进行测试:

  1. 转到Access Token tool并复制您的应用access_token
  2. 转到Graph API Explorer,然后从下拉列表中选择您的应用。
  3. 查询APP_ID/accounts/test-users?access_token=app_access_token这将检索测试用户
  4. 点击其中一个ID(确保此用户是至少有一个其他测试用户的朋友)并将查询更改为:TEST_USER_ID/friends?fields=first_name,last_name,gender&access_token=app_access_token
  5. 你完成了! : - )

  6. <强>更新
    根据下面的评论,我试图检索测试用户的朋友的生日,但结果不一致。

    • 使用测试用户的access_token ID,生日和性别已被检索,但名称
    • 使用应用access_token检索了ID,姓名和性别,但生日

    这是一个简单的代码:

    <html xmlns:fb="http://www.facebook.com/2008/fbml">
    <head></head>
    <body>
    <div id="fb-root"></div>
    <script>
    // You can retrieve this from: https://developers.facebook.com/tools/access_token/
    var app_access_token = "APP_ACCESS_TOKEN";
      window.fbAsyncInit = function() {
        FB.init({
          appId      : 'APP_ID_HERE', // App ID
          channelUrl : '//WWW.YOUR_DOMAIN.COM/channel.html', // Channel File
          status     : true, // check login status
          cookie     : true, // enable cookies to allow the server to access the session
          oauth      : true, // enable OAuth 2.0
          xfbml      : true  // parse XFBML
        });
    
        // Additional initialization code here
      };
    
      // Load the SDK Asynchronously
      (function(d){
         var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
         js = d.createElement('script'); js.id = id; js.async = true;
         js.src = "//connect.facebook.net/en_US/all.js";
         d.getElementsByTagName('head')[0].appendChild(js);
       }(document));
    </script>
    
    <table id="friends">
        <tr>
            <th>ID</th>
            <th>Name</th>
            <th>Gender</th>
            <th>Birthday</th>
        </tr>
    </table>
    
    <script>
    function login(app) {
        FB.login(function(response) {
            if (response.authResponse) {
                var obj = {fields: 'name,gender,birthday', limit: 500};
                if(app)
                    obj.access_token = app_access_token;
                FB.api('/'+response.authResponse.userID+'/friends', 'GET', obj, function(response) {
                    console.log(response);
                    if(response && response.data.length) {
                        var html = '';
                        for(var i=0; i<response.data.length; i++) {
                            html += "<tr>";
                            html += "<td>" + response.data[i].id + "</td>";
                            html += "<td>" + response.data[i].name + "</td>";
                            html += "<td>" + response.data[i].gender + "</td>";
                            html += "<td>" + response.data[i].birthday + "</td>";
                            html += "</tr>";
                        }
                        document.getElementById("friends").innerHTML += html;
                    }
                });
            } else {
                console.log('User cancelled login or did not fully authorize.');
            }
        }, {scope: 'user_birthday,friends_birthday'});
    
    }
    </script>
    <button onclick="login();">List Friends With User Token</button>
    <button onclick="login(1);">List Freinds With App Token</button>
    </body>
    </html>
    

    使用我的一个测试用户帐户的结果:
    enter image description here
    前三行是使用“使用用户令牌列出朋友”检索的,其余部分是使用“ List Freinds With App Token ”检索的。

    底线,这需要Facebook关注!