2010-06-03 3 views
62

Я использую график api.Facebook: получите список страниц, которыми пользователь является администратором

У меня зарегистрирован пользователь и вы хотите вернуть список идентификаторов страниц всех страниц, на которые пользователь является администратором.

Есть ли способ сделать это? Документы довольно плохие - и круговые.

ответ

113

Его простой с Graph API. Этапы:

  1. Получить разрешение manage_pages от пользователя (расширенные разрешения).
  2. Вызвать Graph API - https://graph.facebook.com/me/accounts

Вы можете проверить эту процедуру in the graph explorer -> Просто нажмите на 'Получить маркер доступа' Button-> под 'Расширенное разрешение' чек 'manage_pages' & представить его , Он даст вам подробную информацию о JSON.

+10

Переключение ответов, поскольку это звучит как более стандартный/стабильный способ сделать это. Хотя я бы предостерег от использования слова «простой»: все просто, как только вы знаете, как :) – EoghanM

+1

ya. ты прав. Но может быть несколько решений проблемы. Нам нужно выбрать самый простой среди них. –

+1

Если вы используете FB PHP SDK, это проще: просто $ user_admin_pages = $ facebok-> api ('/ me/accounts'); –

12

я решил его с некоторыми 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; 
     }} 
+4

Начиная с августа 2014 года: «API-интерфейсы FQL и REST больше не доступны в версии 2.1: ранее анонсированные с v2.0, приложения должны перенести на версии API-интерфейсов Graph API, начиная с версии 2.1». Другими словами, FQL больше нельзя использовать. –

10

Вы можете позвонить FB.api(/me/accounts), если вы не хотите использовать FQL.

«учетные записи» - это соединение объекта «Пользователь». См. Документацию по этому вопросу @http://developers.facebook.com/docs/reference/api/user

Конечно, с Facebook всегда есть улов. Сейчас этот метод вернет не только страницы, на которые пользователь является администратором, но и какие приложения они установили. Я почти уверен, что это НЕ предназначенное поведение. Кажется, я вспоминаю это несколько месяцев назад и получаю только список страниц. В документации нет упоминаний о приложениях в этом списке.

Это непростая задача решить - Facebook возвращает имя, категорию и идентификатор для каждого элемента в списке, а каждое приложение имеет категорию «Приложение». Я просто убедился, что я только перечисляю элементы, категория которых не является «Приложением».

+1

По состоянию на декабрь 2012 года в документации для «учетных записей» указано, что она вернет страницы и приложения, которыми владеет пользователь. – ObscureRobot

+0

Есть ли способ перечислить страницы другого лица –

+0

@SoorajlalKG нет, у вас не будет разрешения на это. – Raptor

5

Обратите внимание, что ваше решение возвращает страницы , а также приложения. Если вы хотите строго страницы, вы можете использовать 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)" 
} 
5

Вы просите разрешения с JavaScript SDK на входе

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

, а затем, как только они войти можно восстановить страницы (и приложения) следующим образом:

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

В чем разница между '{perms: 'manage_pages'}' и '{scope: 'manage_pages'}'? –

5

идти по этому адресу

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

Просто нажмите на получить доступ лексемы и перейти к расширенного разрешению

Проверьте manage_pages флажок

и нажмите Получить маркер доступа

Тогда при FQL записи это

меня/счета? Тип = страница

Нажмите на кнопку Отправить. и вы получите все списки страниц, которые вошли в систему пользователя администратора

+1

Где вы обнаружили, что 'me/accounts' поддерживает параметр запроса' type'? –

2

Разрешение

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

действие

$accounts = $facebook->api('/me/accounts'); 
return $accounts; 
2
<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> 
+0

Вы, кажется, используете некоторые фреймворки в своих кодах, не могли бы вы объяснить это? – Raptor

4

Вы можете также использовать "pages_show_list" разрешение, если вы хотите только список страниц facebook, на которые пользователь является администратором.

Разрешение «manage_pages» будет запрашивать у пользователя разрешение на управление его страницами, что может быть слишком навязчивым в зависимости от того, в чем вы нуждаетесь.

Смежные вопросы