Facebook:获取用户管理的页面列表

Facebook:获取用户管理的页面列表,facebook,facebook-graph-api,facebook-page,Facebook,Facebook Graph Api,Facebook Page,我正在使用图形api 我有一个已登录的用户,希望获取该用户作为管理员的所有页面的页面ID列表 有没有办法做到这一点?这些文档非常糟糕,而且是循环的。我用一些FQL解决了这个问题: FB.api{method:'fql.multiquery', 访问令牌:, 查询:{ 查询1:'从页面管理中选择页面id,其中uid='+, 查询2:'从页面中选择页面id、名称、页面url,其中页面id位于从查询1中选择页面id的页面' } },函数查询{ var pages=查询[1]。fql\u结果\u集; }

我正在使用图形api

我有一个已登录的用户,希望获取该用户作为管理员的所有页面的页面ID列表


有没有办法做到这一点?这些文档非常糟糕,而且是循环的。

我用一些FQL解决了这个问题:

FB.api{method:'fql.multiquery', 访问令牌:, 查询:{ 查询1:'从页面管理中选择页面id,其中uid='+, 查询2:'从页面中选择页面id、名称、页面url,其中页面id位于从查询1中选择页面id的页面' } },函数查询{ var pages=查询[1]。fql\u结果\u集; }} 如果不想使用FQL,可以调用FB.api/me/accounts

“帐户”是用户对象的连接。请参阅文档以了解此@

当然,有了Facebook,总有一个陷阱。现在,这个方法不仅会返回用户作为管理员的页面,还会返回用户安装的应用程序。我几乎可以肯定这不是我想要的行为——我似乎记得几个月前使用过它,只得到了一个页面列表。文档中也没有提到此列表中的应用程序


这是一个很容易解决的问题——Facebook返回列表中每个项目的名称、类别和id,每个应用程序都有一个“应用程序”类别。我只是确保只列出类别不是“应用程序”的项目。

请注意,您的解决方案会返回页面和应用程序。如果您严格地想要页面,可以将FQL Multiquery与类型不等于子句一起使用,如下所示:

{
"query1":"select page_id from page_admin where uid = me()",
"query2":"select page_id, name, page_url, type from page where type!='APPLICATION' AND page_id in (select page_id from #query1)"
}

它使用图形API非常简单。步骤:

从用户扩展权限中获取“管理页面”权限。 调用图形API-
您可以测试此过程->只需单击“获取访问令牌”按钮->在“扩展权限”下选中“管理页面”并提交它。它将为您提供管理页面详细信息JSON。

您在登录时请求JavaScript SDK的许可

FB.loginfunction{},{perms:'manage_pages'}; 一旦他们登录,您可以按如下方式检索页面和应用程序:

FB.api'/me/accounts',functionresponse{ console.logresponse; } 去这个地址

`

只需单击获取访问令牌并转到扩展权限

选中“管理页面”复选框

然后单击获取访问令牌

然后在FQL下写下这个

me/账户?类型=第页

点击提交。您将获得所有登录到用户管理员权限的页面列表

行动


如果您只想要用户管理的facebook页面列表,还可以使用pages_show_list权限


manage_pages权限将要求用户权限管理其页面,这可能会太过干扰,具体取决于您需要它做什么。

对于带有Javascript的新GRAPH API v3,使用“任务”字段而不是“perms”字段

//Example JS Call
FB.api('/me/accounts?fields=name,picture.type(square),access_token,tasks', function(response) {console.log(response)});

//Example Response
{
      "name": "Engage",
      "picture": {
        "data": {
          "height": 50,
          "is_silhouette": false,
          "url": "https://scontent.xx.fbcdn.net/v/t1.0-1/c1.0.50.50a/p50x50/430597_259746387431503_2144341304_n.jpg?_nc_cat=103&_nc_eui2=AeGVrU8Wxe7k5BMvRXOEAcUo9dMIxyeMP9POPkYDwfgdRl8QquAtz1GcwXpJaK4z_0o&_nc_ht=scontent.xx&oh=e5b952a4adbbcd1b1af6b71b688f7284&oe=5CF9A64C",
          "width": 50
        }
      },
      "access_token": "XXXXXXXXXX",
      "id": "253263371413138",
      "tasks": [
        "ANALYZE",
        "ADVERTISE",
        "MODERATE",
        "CREATE_CONTENT",
        "MANAGE"
      ]
    }
在数组中查找“MANAGE”而不是“administrate”


此处的完整信息:

切换答案,因为这听起来更标准/更稳定。尽管我要警告大家不要使用“简单”这个词:只要你知道怎么做,一切都很简单:是的。你说得对。但对于一个问题,可以有几种解决方案。我们需要从中选择最简单的一个。如果你使用FBPHPSDK,它会更简单:只要$user_admin_pages=$facebok->api'/me/accounts';与使用图形请求相比,使用FQL查询的优势在于,图形总是强制“分页”返回的数据。它只返回前几个结果,以及指向下几个结果的链接。而在FQL中,它总是在一次内返回整个结果集。谢谢。它仅在当前用户管理应用程序时列出页面。有没有办法列出另一个人的页面?截至2012年12月,“帐户”的文档声明它将返回用户拥有的页面和应用程序。有没有办法列出另一个人的页面person@SoorajlalKG不,您没有这样做的权限。{perms:'manage_pages'}和{scope:'manage_pages'}之间有什么区别?你在哪里发现我/帐户支持类型查询参数?你似乎在代码中使用了一些框架,你介意解释一下吗?在我看来,仅仅发布代码并不是一个好答案。截至2014年8月:FQL和REST API在v2.1中不再可用:之前在v2.0中发布,应用程序必须迁移到从v2.1开始的版本化图形API调用。。换句话说,FQL不能再使用了。10年后,文档仍然很糟糕。
$accounts = $facebook->api('/me/accounts');  
return $accounts;
<head>
 <link rel="stylesheet" href="@Url.Content("~/Content/jquery.remodal.css")">
</head>

<body>
<script type="text/javascript" src="@Url.Content("~/Scripts/Home/jquery.remodal.js")"></script>
<div class="remodal" id="page-selector-remodal" data-remodal-id="pageselector">
        <p>Please select a facebook page Share </p>
        <div id="page-name-container">
            <select id="page-name" class="form-control">
            </select>
        </div>
        <a class="remodal-confirm" id="facebookPageSelectSubmit" href="#">OK</a>
        <a class="remodal-cancel" id="remodal-cancel" href="#">CANCEL</a>
    </div>

    <div data-remodal-id="modal-status">
        <p id="modal-status-content">
            The Account you have selected does not have Email.
        </p>
        <br>
        <a class="remodal-confirm" href="#">OK</a>
    </div>
<script type="text/javascript>
 (function (d, s, id) {
            var js, fjs = d.getElementsByTagName(s)[0];
            if (d.getElementById(id)) return;
            js = d.createElement(s);
            js.id = id;
            js.src = "//connect.facebook.net/en_US/sdk.js";
            fjs.parentNode.insertBefore(js, fjs);
        }(document, 'script', 'facebook-jssdk'));

        window.fbAsyncInit = function () {
            FB.init({
                appId: 'YOUR APP ID',
                cookie: true,  // enable cookies to allow the server to access 
                // the session
                xfbml: true,  // parse social plugins on this page
                version: 'v2.2' // use version 2.1
            });
        };

        var pageSelector = $('[data-remodal-id=pageselector]').remodal();
        var modalstatus = $('[data-remodal-id=modal-status]').remodal();

        function statusChangeCallback(response) {

            if (response.status === 'connected') {
                // Logged into your app and Facebook.
                //testAPI();
            } else if (response.status === 'not_authorized') {
                // The person is logged into Facebook, but not your app.
                $("#modal-status-content").empty().html(response.status);
                modalstatus.open();
            }

            else {
                $("#modal-status-content").empty().html(response.status);
                modalstatus.open();
                // The person is not logged into Facebook, so we're not sure if
                // they are logged into this app or not.
                document.getElementById('status').innerHTML = 'Please log ' +
                    'into Facebook.';
            }
        }


        function FacebookHandler() {
            FB.login(function (result) {
                if (result != null && result.authResponse != null && result.authResponse != undefined) {
                    facebookPageData = result;
                    FB.api('/me/accounts', function (accountsResult) {
                        if (accountsResult != null && accountsResult.data.length != 0) {
                            //open the remodal here
                            pageSelector.open();
                            facebookAccountsData = accountsResult;
                            var data = accountsResult['data'];
                            if (data != null) {
                                for (var i = 0; i < data.length; i++) {
                                    $("#page-name").append('<option value="' + data[i].id + '">' + data[i].name + '</option>');
                                }
                            }
                            unblockUI('body');
                            $("#flip-container, #feature-container, #branding-container, #intro-arrow-container, #share-container, #copyright-text-container").hide();
                            $("body").css("padding-right", "0");
                        }
                        else {
                            $("#modal-status-content").empty().html("The Account you have selected does not have any facebook page,<br />Post to Wall.");
                            modalstatus.open();
                            pageSelector.open();
                            unblockUI('body');
                        }
                    });
                }
                else {
                    $("#modal-status-content").empty().html("Unable to retrieve your details from facebook, try again after sometime.");
                    modalstatus.open();
                    unblockUI('body');
                }
            }, { scope: 'manage_pages, publish_stream' });
        }

        $("#facebookPageSelectSubmit").on("click", function () {
            var facebookpageId = $("#page-name option:selected").val();
            if (facebookpageId != null) {
                FB.api('/' + facebookpageId, function (identity) {

                    if (identity != null) {
                        FB.api('/' + facebookpageId, { fields: 'access_token' }, function (resp) {
                            if (resp.access_token != null) {
                                //Get the "resp"(Data) here
                        }
                        else {

                        }

                    });
                }

                else {

                }
            });
        }
        else {

        }
    });
</script>

//Finally call the "FacebookHandler()" function on click


</body>
//Example JS Call
FB.api('/me/accounts?fields=name,picture.type(square),access_token,tasks', function(response) {console.log(response)});

//Example Response
{
      "name": "Engage",
      "picture": {
        "data": {
          "height": 50,
          "is_silhouette": false,
          "url": "https://scontent.xx.fbcdn.net/v/t1.0-1/c1.0.50.50a/p50x50/430597_259746387431503_2144341304_n.jpg?_nc_cat=103&_nc_eui2=AeGVrU8Wxe7k5BMvRXOEAcUo9dMIxyeMP9POPkYDwfgdRl8QquAtz1GcwXpJaK4z_0o&_nc_ht=scontent.xx&oh=e5b952a4adbbcd1b1af6b71b688f7284&oe=5CF9A64C",
          "width": 50
        }
      },
      "access_token": "XXXXXXXXXX",
      "id": "253263371413138",
      "tasks": [
        "ANALYZE",
        "ADVERTISE",
        "MODERATE",
        "CREATE_CONTENT",
        "MANAGE"
      ]
    }