2010-06-03 11 views

risposta

113

La sua semplice con Graph API. Passaggi:

  1. Ottieni l'autorizzazione manage_pages dall'utente (autorizzazioni estese).
  2. chiamare l'API Grafico - https://graph.facebook.com/me/accounts

È possibile verificare questa procedura in the graph explorer -> Basta cliccare sul 'Get token di accesso' pulsante-> sotto 'autorizzazione estesa' 'manage_pages' controllo & lo presenta . Ti darà i dettagli della pagina di amministrazione JSON.

+10

Cambiare le risposte in questo modo sembra il modo più standard/stabile di farlo. Anche se vorrei mettere in guardia contro qualsiasi uso della parola 'semplice': tutto è semplice una volta che sai come :) – EoghanM

+1

ya. hai ragione. Ma ci possono essere diverse soluzioni a un problema. Dobbiamo scegliere il più semplice tra loro. –

+1

Se utilizzi FB PHP SDK è più semplice: solo $ user_admin_pages = $ facebok-> api ('/ me/accounts'); –

12

ho risolto con un po '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

A partire da agosto 2014: "Le API FQL e REST non sono più disponibili nella v2.1: annunciate in precedenza con la versione 2.0, le app devono migrare alle chiamate API Graph con versione a partire dalla v2.1.". In altre parole, l'FQL non può più essere usato. –

10

È possibile chiamare FB.api(/me/accounts) se non si desidera utilizzare FQL.

"account" è una connessione dell'oggetto Utente. Vedere la documentazione per questo @http://developers.facebook.com/docs/reference/api/user

Naturalmente, con Facebook, c'è sempre un problema. In questo momento questo metodo restituirà non solo le pagine di cui l'utente è un amministratore, ma anche quali applicazioni hanno installato. Sono quasi sicuro che questo NON sia il comportamento previsto - mi sembra di ricordare di usarlo qualche mese fa e di avere solo un elenco di pagine. La documentazione non menziona nemmeno le applicazioni in questo elenco.

Questo è un problema facile da risolvere - Facebook restituisce il nome, la categoria e l'ID per ciascun elemento nell'elenco e ogni applicazione ha una categoria di "Applicazione". Mi sto semplicemente assicurando di elencare solo gli articoli la cui categoria non è "Applicazione".

+1

A partire da dicembre 2012, la documentazione per "account" indica che restituirà pagine e app di proprietà dell'utente. – ObscureRobot

+0

È possibile in qualsiasi modo elencare pagine di un'altra persona –

+0

@SoorajlalKG no, non si avrà il permesso di farlo. – Raptor

5

Si noti che la soluzione restituisce Pagine e Applicazioni. Se si vuole rigorosamente pagine, è possibile utilizzare FQL multiquery con un "tipo non è uguale a" clausola del genere:

{ 
"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

chiedete il permesso con l'SDK JavaScript su login

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

e poi, una volta che il log-in è possibile recuperare le pagine (e le applicazioni) come segue:

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

Qual è la differenza tra '{perms: 'manage_pages'}' e '{scope: 'manage_pages'}'? –

5

go a questo indirizzo

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

Basta cliccare su get token di accesso e andare a autorizzazione estesa

Controllare i manage_pages casella

e click Get token di accesso

Poi sotto FQL write questo

me/account? Type = pagina

Cliccare su Invia. e otterrete tutte le liste di pagina che loggati utente admin

+1

Dove hai trovato che 'me/accounts' supporta il parametro di ricerca' type'? –

2

permesso

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

azione

$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

Sembra che tu abbia usato alcuni schemi nei tuoi codici, ti dispiacerebbe spiegarlo? – Raptor

4

È inoltre possibile utilizzare il permesso "pages_show_list", se si vuoi solo la lista delle pagine di Facebook di cui l'utente è amministratore.

L'autorizzazione "manage_pages" chiederà all'utente l'autorizzazione a gestire le sue pagine, il che può essere troppo intrusivo a seconda di cosa è necessario.