Facebook:获取用户是pipe理员的页面列表

我正在使用graphicsapi。

我有一个login用户,并希望获取用户是pipe理员的所有页面的页面ID列表。

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

它简单的graphicsAPI。 脚步:

  1. 获取用户的manage_pages权限(扩展权限)。
  2. 调用graphicsAPI – https://graph.facebook.com/me/accounts

您可以在图表资源pipe理器中testing这个过程 – >只需点击'获取访问令牌'button – > '扩展权限'检查'manage_pages'并提交它。 它会给你的pipe理员页面细节JSON。

我用一些FQL解决了它:

 FB.api({method: 'fql.multiquery', access_token: <access_token>, queries: { query1: 'select page_id from page_admin where uid = ' + <uid>, query2: 'select page_id, name, page_url from page where page_id in (select page_id from #query1)' } }, function(queries){ var pages = queries[1].fql_result_set; }} 

如果您不想使用FQL,则可以调用FB.api(/me/accounts)

'accounts'是User对象的连接。 请参阅此文档http://developers.facebook.com/docs/reference/api/user

当然,在Facebook上,总有一个问题。 现在这个方法不但会返回用户是pipe理员的页面,还会返回他们安装的应用程序。 我几乎肯定这不是预期的行为 – 我似乎记得使用这个几个月前,只得到一个页面的列表。 文档中也没有提到这个列表中的应用程序。

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

请注意,您的解决scheme返回页面以及应用程序 。 如果您严格要求Pages,则可以使用“types不等于”子句的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)" } 

去这个地址

https://developers.facebook.com/tools/explorer/431294226918345/? method = GET & path =me% 2Faccounts% 3Ftype% 3Dpage`

只需点击获取访问令牌,并进入扩展权限

检查manage_pagescheckbox

然后单击获取访问令牌

然后在FQL下写这个

我/帐户?types=页面

点击提交。 并且您将获得以用户admin身份login的所有页面列表

您在login时要求使用JavaScript SDK的许可

 FB.login(function(){}, {perms:'manage_pages'}); 

然后一旦他们login,你可以检索页面(和应用程序)如下:

 FB.api('/me/accounts', function(response){ console.log(response); }) 

您也可以使用“pages_show_list”权限,如果您只想要用户是pipe理员的Facebook页面的列表。

“manage_pages”权限将要求用户有权pipe理他的页面,这可能是太多侵入,取决于你需要什么。

允许

 $facebook->getLoginUrl( array( "scope" => "manage_pages" ) ); 

行动

 $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>