Facebook: Liste der Seiten abrufen, für die ein Benutzer Administrator ist


84

Ich benutze die Grafik-API.

Ich habe einen angemeldeten Benutzer und möchte eine Liste der Seiten-IDs aller Seiten zurückerhalten, deren Administrator der Benutzer ist.

Gibt es eine Möglichkeit, dies zu tun? Die Dokumente sind ziemlich schlecht - und kreisförmig.


3
10 Jahre später, und die Dokumentation ist immer noch schlecht.
Darkwonder

Antworten:


142

Es ist einfach mit Graph API. Schritte:

  1. Holen Sie sich die manage_pagesBerechtigung vom Benutzer (erweiterte Berechtigungen).
  2. Rufen Sie die Graph-API auf - https://graph.facebook.com/me/accounts

Sie können dieses Verfahren im Diagramm-Explorer testen -> Klicken Sie einfach auf die Schaltfläche "Zugriffstoken abrufen" -> unter "Erweiterte Berechtigung" die Option "Verwaltungsseiten" überprüfen und senden. Sie erhalten die Admin-Seitendetails JSON.


11
Das Wechseln der Antworten klingt nach der Standard- / stabileren Methode. Obwohl ich vor jeder Verwendung des Wortes "einfach" warnen würde: Alles ist einfach, sobald Sie wissen wie :)
EoghanM

1
ya. Du hast Recht. Es gibt jedoch mehrere Lösungen für ein Problem. Wir müssen die einfachste unter ihnen auswählen.
Avisek Chakraborty

1
Wenn Sie das FB PHP SDK verwenden, ist es einfacher: nur $ user_admin_pages = $ facebok-> api ('/ me / accounts');
Jepser Bernardino

2
Der Vorteil der Abfrage mit FQL gegenüber der Verwendung einer Diagrammanforderung besteht darin, dass das Diagramm immer erzwingt, dass die zurückgegebenen Daten "ausgelagert" werden (es werden nur die ersten Ergebnisse und ein Link zu den nächsten zurückgegeben) - während in FQL immer das zurückgegeben wird gesamte Ergebnismenge auf einmal.
Yuval A.

5
Vielen Dank. Es werden nur Seiten aufgelistet, wenn der aktuelle Benutzer die App verwaltet. Gibt es eine Möglichkeit, Seiten einer anderen Person aufzulisten?
Soorajlal KG

14

Ich habe es mit etwas FQL gelöst:

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;
       }}

5
Ab August 2014: "Die FQL- und REST-APIs sind in Version 2.1 nicht mehr verfügbar: Zuvor mit Version 2.0 angekündigt, müssen Apps ab Version 2.1 auf versionierte Graph-API-Aufrufe migriert werden." Mit anderen Worten, die FQL kann nicht mehr verwendet werden.
Kapitein Witbaard

11

Sie können anrufen, FB.api(/me/accounts)wenn Sie FQL nicht verwenden möchten.

'Konten' ist eine Verbindung des Benutzerobjekts. Weitere Informationen finden Sie in der Dokumentation zu @ http://developers.facebook.com/docs/reference/api/user

Natürlich gibt es bei Facebook immer einen Haken. Derzeit gibt diese Methode nicht nur die Seiten zurück, auf denen der Benutzer Administrator ist, sondern auch die von ihm installierten Anwendungen. Ich bin mir fast sicher, dass dies NICHT das beabsichtigte Verhalten ist - ich erinnere mich an die Verwendung vor einigen Monaten und habe nur eine Liste von Seiten erhalten. In der Dokumentation werden auch Anwendungen in dieser Liste nicht erwähnt.

Dies ist jedoch ein leicht zu lösendes Problem. Facebook gibt den Namen, die Kategorie und die ID für jedes Element in der Liste zurück, und jede Anwendung hat die Kategorie "Anwendung". Ich stelle nur sicher, dass ich nur Elemente aufführe, deren Kategorie nicht "Anwendung" ist.


1
Ab Dezember 2012 wird in der Dokumentation für "Konten" angegeben, dass Seiten und Apps zurückgegeben werden, die dem Benutzer gehören.
ObscureRobot

Gibt es eine Möglichkeit, Seiten einer anderen Person
aufzulisten

@SoorajlalKG nein, du wirst nicht die Erlaubnis dazu haben.
Raptor

11

gehe zu dieser Adresse

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

Klicken Sie einfach auf Zugriffstoken abrufen und gehen Sie zu Erweiterte Berechtigung

Überprüfen Sie die manage_pages Checkbox

und klicken Sie auf Get Access Token

Dann schreiben Sie dies unter FQL

Ich / Konten? Typ = Seite

Klicken Sie auf Senden. und Sie erhalten alle Seitenlisten, die im Benutzeradministrator angemeldet sind


5
Wo haben Sie gefunden, dass Abfrageparameter me/accountsunterstützt typewerden?
Serge S.

7

Sie fragen beim Anmelden nach der Erlaubnis mit dem JavaScript SDK

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

Sobald sie sich angemeldet haben, können Sie die Seiten (und Apps) wie folgt abrufen:

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

4
Was ist der Unterschied zwischen {perms: 'manage_pages'}und {scope: 'manage_pages'}?
Kees C. Bakker

6

Sie können auch die Berechtigung "pages_show_list" verwenden, wenn Sie nur die Liste der Facebook-Seiten anzeigen möchten, deren Administrator der Benutzer ist.

Mit der Berechtigung "manage_pages" wird der Benutzer aufgefordert, seine Seiten zu verwalten. Dies kann je nach Bedarf zu aufdringlich sein.


5

Beachten Sie, dass Ihre Lösung sowohl Seiten als auch Anwendungen zurückgibt . Wenn Sie ausschließlich Seiten möchten, können Sie FQL Multiquery mit der folgenden Klausel "Type not equals" verwenden:

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

Genehmigung

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

Aktion

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

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

Sie scheinen einige Frameworks in Ihren Codes zu verwenden. Würde es Ihnen etwas ausmachen, dies zu erklären?
Raptor

Nur einen Code zu posten, ist aus meiner Sicht keine gute Antwort.
Igorzovisk

0

Verwenden Sie mit der neuen GRAPH-API v3 mit Javascript das Feld "Aufgaben" anstelle des Felds "Dauerwellen".

//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"
      ]
    }

Anstatt im Array nach 'ADMINISTER' zu suchen, suchen Sie nach 'MANAGE'.

Vollständige Informationen hier: https://developers.facebook.com/docs/pages/access-tokens

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.