web-dev-qa-db-fra.com

Facebook: obtenir la liste des pages qu'un utilisateur est administrateur de

J'utilise le graphique api.

J'ai un utilisateur connecté et je souhaite obtenir une liste des identifiants de page de toutes les pages dont l'utilisateur est administrateur.

Y-a-t'il une façon de le faire? Les docs sont plutôt mauvais - et circulaires.

68
EoghanM

C'est simple avec l'API graphique. Pas:

  1. Obtenez l'autorisation manage_pages de l'utilisateur (autorisations étendues).
  2. Appelez l'API graphique - https://graph.facebook.com/me/accounts

Vous pouvez tester cette procédure dans l'explorateur de graphes -> Il suffit de cliquer sur 'Obtenir le jeton d'accès' bouton-> sous 'Autorisation étendue' cochez 'manage_pages' & envoyez-le. Il vous donnera le JSON admin-page-details.

129
Avi C

Je l'ai résolu avec un peu de 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;
       }}
13
EoghanM

Vous pouvez appeler FB.api(/me/accounts) si vous ne souhaitez pas utiliser FQL. 

"comptes" est une connexion de l'objet utilisateur. Voir la documentation correspondante @ http://developers.facebook.com/docs/reference/api/user

Bien sûr, avec Facebook, il y a toujours un piège. Pour le moment, cette méthode renverra non seulement les pages dont l'utilisateur est un administrateur, mais également les applications installées. Je suis presque certain que ce n'est PAS le comportement souhaité - je me souviens de l'avoir utilisé il y a quelques mois et de ne recevoir qu'une liste de pages. La documentation ne mentionne pas non plus les applications de cette liste.

Il s'agit toutefois d'un problème facile à résoudre: Facebook renvoie le nom, la catégorie et l'identifiant de chaque élément de la liste, et chaque application possède une catégorie "Application". Je m'assure simplement de ne répertorier que les éléments dont la catégorie n'est pas "Application".

11
Steven Mercatante

aller à cette adresse 

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

Cliquez simplement sur get Access Token et accédez à extended Permission.

Cochez la case manage_pages

et cliquez sur Obtenir un jeton d'accès

Puis, écrivez ceci sous FQL 

moi/comptes? type = page

Cliquez sur Soumettre. et vous obtiendrez toutes les listes de pages qui ont ouvert une session utilisateur admin

8
Tarun Gupta

Vous demandez la permission avec le SDK JavaScript lors de la connexion 

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

et une fois qu’ils se sont connectés, vous pouvez récupérer les pages (et les applications) comme suit:

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

Vous pouvez également utiliser l'autorisation "pages_show_list", si vous souhaitez uniquement la liste des pages facebook dont l'utilisateur est l'administrateur.

La permission "manage_pages" demandera à l'utilisateur la permission de gérer ses pages, ce qui peut être trop intrusif en fonction de vos besoins.

5
gneto

Autorisation

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

action

$accounts = $facebook->api('/me/accounts');  
return $accounts;
5

Notez que votre solution renvoie Pages ainsi que Applications . Si vous voulez strictement Pages, vous pouvez utiliser FQL Multiquery avec une clause "Type not equals" comme ceci:

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

Avec la nouvelle API GRAPH v3 avec Javascript, utilisez le champ "tâches" au lieu du champ "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"
      ]
    }

Au lieu de regarder 'ADMINISTER' dans le tableau, cherchez 'MANAGE'.

Toutes les informations ici: https://developers.facebook.com/docs/pages/access-tokens

0
Jason Engage