Facebook: получить список страниц, которые пользователь является администратором
Я использую API graph.
У меня есть зарегистрированный пользователь, и я хочу вернуть список идентификаторов страниц всех страниц, на которых пользователь является администратором.
есть ли способ сделать это? Документы довольно плохие-и круговые.
9 ответов:
его просто с графическим API. Шаги:
- скачать
manage_pages
разрешения от пользователя (расширенные права).- вызовите API Graph -https://graph.facebook.com/me/accounts
вы можете проверить эту процедуру в графе проводник!--8--> -> нажмите на кнопку 'Получить Маркер Доступа' -15--> под 'расширенное разрешение' проверьте 'manage_pages' и отправить его. Это даст вам админ-страница-подробности 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; }}
можно назвать
FB.api(/me/accounts)
Если вы не хотите использовать FQL.'accounts' - это соединение объекта User. Смотрите документацию для этого @ http://developers.facebook.com/docs/reference/api/user
конечно, с Facebook, всегда есть подвох. Прямо сейчас этот метод вернет не только страницы, на которых пользователь является администратором, но и какие приложения они установили. Я почти уверен, что это не предполагаемое поведение - я, кажется, помню используя это несколько месяцев назад и только получая список страниц. В документации также не упоминается о приложениях в этом списке.
Это простая проблема для решения, хотя-Facebook возвращает имя, категорию и идентификатор для каждого элемента в списке, и каждое приложение имеет категорию "приложение". Я просто удостоверяюсь, что я только перечисляю элементы, категория которых не является "приложением".
перейти по этому адресу
просто нажмите на кнопку получить маркер доступа и перейти к продлено разрешение
Регистрация manage_pages флажок
и нажмите получить маркер доступа
тогда в соответствии с выражением, писать это
Мне/счета?тип=страница
нажмите на "Отправить". и вы получите все списки страниц, которые вошли в пользователя admin
обратите внимание, что ваше решение возвращает страницы а также приложения. Если вы строго хотите страницы, вы можете использовать FQL Multiquery с предложением" Type not equals " следующим образом:
{ "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)" }
вы просите разрешения с помощью JavaScript SDK при входе в систему
FB.login(function(){}, {perms:'manage_pages'});
и затем, как только они войдут в систему, вы можете получить страницы (и приложения) следующим образом :
FB.api('/me/accounts', function(response){ console.log(response); })
вы также можете использовать разрешение "pages_show_list", если вам нужен только список страниц facebook, администратором которых является пользователь.
разрешение "manage_pages" будет запрашивать разрешение пользователя на управление его страницами, которые могут быть слишком навязчивыми в зависимости от того, для чего вам это нужно.
разрешение
$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>