Facebook : 사용자가 관리자 인 페이지 목록 가져 오기


84

그래프 API를 사용하고 있습니다.

로그인 한 사용자가 있으며 사용자가 관리자 인 모든 페이지의 페이지 ID 목록을 가져오고 싶습니다.

이렇게하는 방법이 있습니까? 문서는 꽤 나쁘고 순환 적입니다.


3
10 년이 지난 후에도 문서는 여전히 나쁩니다.
Darkwonder

답변:


142

Graph API로 간단합니다. 단계 :

  1. manage_pages사용자로부터 권한을 얻습니다 (확장 권한).
  2. Graph API 호출-https: //graph.facebook.com/me/accounts

그래프 탐색기 에서이 절차 테스트 할 수 있습니다 .-> 'Get Access Token' 버튼을 클릭-> 'Extended permission'에서 'manage_pages'를 확인하고 제출합니다. admin-page-details JSON을 제공합니다.


11
대답을 바꾸는 것은 더 표준적이고 안정적인 방법처럼 들립니다. '단순'이라는 단어의 사용에 대해 경고하지만 : 방법을 알면 모든 것이 간단합니다. :)
EoghanM

1
당신. 너가 맞아. 그러나 문제에 대한 몇 가지 해결책이있을 수 있습니다. 우리는 그들 중에서 가장 단순한 것을 선택해야합니다.
Avisek Chakraborty

1
FB PHP SDK를 사용하는 경우 더 쉽습니다. $ user_admin_pages = $ facebok-> api ( '/ me / accounts');
Jepser Bernardino

2
FQL을 사용하는 쿼리와 그래프 요청을 사용하는 것의 장점은 그래프가 항상 반환 된 데이터를 '페이징'(처음 몇 개의 결과와 다음 몇 개의 결과에 대한 링크 만 반환)하도록 강제하는 반면 FQL에서는 항상 한 번에 전체 결과 세트.
Yuval A.

5
감사. 현재 사용자가 앱을 관리하는 경우에만 페이지를 나열합니다. 다른 사람의 페이지를 나열하는 방법이 있습니까?
Soorajlal KG

14

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

5
2014 년 8 월 현재 : "FQL 및 REST API는 v2.1에서 더 이상 사용할 수 없습니다. 이전에 v2.0에서 발표되었으며, 앱은 v2.1부터 버전이 지정된 Graph API 호출로 마이그레이션해야합니다." 즉, FQL을 더 이상 사용할 수 없습니다.
Kapitein Witbaard

11

FB.api(/me/accounts)FQL을 사용하지 않으려면 전화 할 수 있습니다 .

'계정'은 사용자 개체의 연결입니다. 이 @ http://developers.facebook.com/docs/reference/api/user에 대한 문서를 참조하십시오.

물론 Facebook에는 항상 문제가 있습니다. 현재이 메서드는 사용자가 관리자 인 페이지뿐만 아니라 설치 한 응용 프로그램도 반환합니다. 나는 이것이 의도 한 행동이 아니라는 것을 거의 확신합니다. 나는 이것을 몇 달 전에 사용했고 페이지 목록 만 얻은 것을 기억하는 것 같습니다. 설명서에는이 목록의 응용 프로그램에 대한 언급도 없습니다.

하지만 이것은 해결하기 쉬운 문제입니다. Facebook은 목록의 각 항목에 대해 이름, 범주 및 ID를 반환하고 각 응용 프로그램에는 '응용 프로그램'범주가 있습니다. 나는 단순히 카테고리가 'Application'이 아닌 항목 만 나열하도록하는 것입니다.


1
2012 년 12 월부터 '계정'에 대한 문서에는 사용자가 소유 한 페이지와 앱이 반환 될 것이라고 명시되어 있습니다.
ObscureRobot

다른 사람의 목록 페이지에 어떤 식 으로든 Thr이고
Soorajlal KG

@SoorajlalKG 아니요, 그렇게 할 수있는 권한이 없습니다.
Raptor

11

이 주소로 이동

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

액세스 토큰 얻기를 클릭 하고 확장 권한으로 이동 하십시오.

체크 manage_pages의 체크 박스를

클릭 액세스 토큰을 가져 오기

그런 다음 FQL에서 이것을 작성하십시오.

me / accounts? type = page

제출을 클릭합니다. 사용자 admin에 로그인 한 모든 페이지 목록이 표시됩니다.


5
검색어 매개 변수 를 me/accounts지원 하는 곳은 어디 type입니까?
Serge S.

7

로그인시 JavaScript SDK로 권한을 요청합니다.

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

그런 다음 로그인하면 다음과 같이 페이지 (및 앱)를 검색 할 수 있습니다.

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

4
{perms: 'manage_pages'}과 의 차이점은 무엇입니까 {scope: 'manage_pages'}?
키스 C. 바커

6

사용자가 관리하는 facebook 페이지 목록 만 원하는 경우 "pages_show_list"권한을 사용할 수도 있습니다.

"manage_pages"권한은 자신의 페이지를 관리 할 수있는 권한을 사용자에게 요청합니다. 이는 필요한 항목에 따라 너무 방해가 될 수 있습니다.


5

솔루션은 Pages 및 Applications를 반환합니다 . 페이지를 엄격히 원하면 다음과 같이 "Type not equals"절과 함께 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)"
}


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>

코드에서 일부 프레임 워크를 사용하는 것 같습니다. 설명해 주시겠습니까?
Raptor

내 관점에서 코드를 게시하는 것은 좋은 대답이 아닙니다.
Igorzovisk

0

Javascript가 포함 된 새로운 GRAPH API v3에서는 'perms'필드 대신 'tasks'필드를 사용합니다.

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

어레이 내에서 'ADMINISTER'를 찾는 대신 'MANAGE'를 찾으십시오.

전체 정보 : https://developers.facebook.com/docs/pages/access-tokens

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.