it-swarm-ko.com

facebook : 영구 페이지 액세스 토큰?

나는 페이스 북 페이지를 데이터 소스 중 하나로 가지고있는 프로젝트에서 일한다. GUI가 없어도 정기적으로 데이터를 가져옵니다. 그런 다음 웹 앱을 사용하여 이미 보유한 데이터를 표시합니다.

모든 정보가 공개 된 것은 아닙니다. 즉, 데이터에 한 번 액세스 한 다음 보관해야합니다. 그러나, 나는 그 과정을 모른다. 그리고 아직 그것에 대한 좋은 지침서를 찾지 못했다. 나는 access_token를 필요로한다고 생각한다. 사용자로부터 단계별로 어떻게 얻을 수 있을까? 사용자는 페이 스북 페이지의 관리자이며 페이지의 FB 앱을 추가해야합니까?

편집 : 팁을 주셔서 감사합니다 @phwd. 난 더 이상 존재하지 않는 offline_access가있는 경우에도 영구 페이지 액세스 토큰을 얻는 방법을 자습서로 작성했습니다.

편집 : 방금 그것이 여기에 답변을 찾았습니다 : FB 페이지 정보를 끌어 서버에 대한 장기 FB 액세스 토큰

171
Vlasec

페이 스북의 확장 페이지 토큰 문서 에 설명 된 지침에 따라 만료되지 않는 페이지 액세스 토큰을 얻을 수있었습니다.

달리 명시된 경우를 제외하고 이러한 모든 단계에 대해 그래프 API 탐색기 를 사용하는 것이 좋습니다.

0. Facebook 앱 만들기

이미 앱이있는 경우 일 경우 1 단계로 건너 뜁니다.

  1. 가서 내 앱 으로 이동하십시오.
  2. "+ 새 앱 추가"를 클릭하십시오.
  3. 웹 사이트 앱을 설치하십시오.

권한이나 기타 사항을 변경할 필요가 없습니다. 액세스 토큰을 완료하기 전에 사라지지 않는 앱이 필요합니다.

1. 단명 사용자 액세스 토큰 가져 오기

  1. 그래프 API 탐색기 로 이동하십시오.
  2. 액세스 토큰을 가져올 응용 프로그램을 선택하십시오 ( "내 응용 프로그램"메뉴가 아닌 "응용 프로그램"드롭 다운 메뉴에서).
  3. "Get Token"> "사용자 액세스 토큰 가져 오기"를 클릭하십시오.
  4. 팝업의 "확장 권한"탭에서 "manage_pages"를 선택하십시오.
  5. "액세스 토큰 가져 오기"를 클릭하십시오.
  6. 대상 페이지를 관리 할 수있는 권한이있는 Facebook 계정에서 액세스 권한을 부여하십시오. 이 사용자가 액세스 권한을 상실하면 최종 만료되지 않는 액세스 토큰이 작동을 멈추게됩니다.

"액세스 토큰"필드에 나타나는 토큰은 수명이 짧은 액세스 토큰입니다.

2. 장기 액세스 토큰 생성

다음 이 지침 은 Facebook 문서에서 GET 요청을

https://graph.facebook.com/v2.10/oauth/access_token?grant_type=fb_exchange_token&client_id={app_id} & client_secret = {app_secret} & fb_exchange_token = {short_lived_token}

앱의 ID와 비밀 정보와 이전 단계에서 생성 된 수명이 짧은 토큰을 입력하십시오.

당신은 그래프 API 탐색기를 사용할 수 없습니다. 어떤 이유로이 요청에 붙어 있습니다. 응답은 JSON이 아니지만 쿼리 문자열이므로 생각합니다. GET 요청이므로 브라우저의 URL로 이동할 수 있습니다.

응답은 다음과 같아야합니다.

{ "access_token": "ABC12", "token_type": "bearer", "expires_in": 5183791}

"ABC123"은 수명이 긴 액세스 토큰입니다. 이를 Access Token Debugger 에 넣으면 확인할 수 있습니다. "Expires"아래에 "2 months"와 같은 것이 있어야합니다.

3. 사용자 ID 가져 오기

수명이 긴 액세스 토큰을 사용하여에 대한 GET 요청을

https://graph.facebook.com/v2.10/me?access_token={long_lived_access_token}

id 필드는 계정 ID입니다. 다음 단계에서 필요합니다.

4. 영구 페이지 액세스 토큰 가져 오기

에 대한 GET 요청하기

https://graph.facebook.com/v2.10/{account_id}/accounts? access_token = {long_lived_access_token} =

JSON 응답에는 사용자가 액세스 할 수있는 항목의 배열 인 data 필드가 있어야합니다. 영구 액세스 토큰을 사용할 페이지의 항목을 찾습니다. access_token 필드에는 영구 액세스 토큰이 있어야합니다. 그것을 복사하고 Access Token Debugger 로 테스트하십시오. "Expires"에서 "Never"라고 말해야합니다.

596
donut

여기 내 솔루션은 Graph API Explorer & Access Token Debugger :

  1. 그래프 API 탐색기 :
    • 오른쪽 상단의 드롭 다운 메뉴에서 앱을 선택하십시오.
    • 드롭 다운 (액세스 토큰 필드 오른쪽)에서 "사용자 액세스 토큰 가져 오기"를 선택하고 필요한 권한을 선택하십시오
    • 사용자 액세스 토큰 복사
  2. 액세스 토큰 디버거 :
    • 복사 된 토큰을 붙이고 "디버그"를 누릅니다.
    • "Extend Access Token"을 누르고 생성 된 수명이 긴 사용자 액세스 토큰을 복사하십시오
  3. 그래프 API 탐색기 :
    • 복사 한 토큰을 "액세스 토큰"필드에 붙여 넣습니다.
    • "PAGE_ID? fields = access_token"을 사용하여 GET 요청을하십시오.
    • 응답 (노드 "access_token")에서 영구 페이지 액세스 토큰을 찾습니다
  4. (선택 사항) 액세스 토큰 디버거 :
    • 영구 토큰을 붙이고 "Debug"를 누릅니다.
    • "Expires"는 "Never"여야합니다.

(API 버전 2.9-2.11, 3.0-3.1에서 테스트 됨)

75
Rob

Vlasec 대답의 권장 단계 외에도 다음을 사용할 수 있습니다.

11
chuycepeda

더 쉽게 사용할 수 있도록 PHP 스크립트를 만들었습니다. 앱을 만듭니다 . 그래프 API 탐색기 에서 앱을 선택하고 manage_pages 및 publish_pages 권한이있는 사용자 토큰을 가져옵니다. 정보 페이지 하단에서 페이지의 ID를 찾으십시오. 구성 변수를 채우고 스크립트를 실행하십시오.

<?php
$args=[
    'usertoken'=>'',
    'appid'=>'',
    'appsecret'=>'',
    'pageid'=>''
];

echo generate_token($args);

function generate_token($args){
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.8/oauth/access_token?grant_type=fb_exchange_token&client_id={$args['appid']}&client_secret={$args['appsecret']}&fb_exchange_token={$args['usertoken']}")); // get long-lived token
    $longtoken=$r->access_token;
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.8/me?access_token={$longtoken}")); // get user id
    $userid=$r->id;
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.8/{$userid}/accounts?access_token={$longtoken}")); // get permanent token
    foreach($r->data as $d) if($d->id==$args['pageid']) return $d->access_token;
}
9
dw1

삶을 편하게하기위한 또 다른 PHP 대답. 페이스 북 그래프 API 2.9 로 업데이트되었습니다. 그냥 채우고로드하십시오.

<?php
$args=[
/*-- Permanent access token generator for Facebook Graph API version 2.9 --*/
//Instructions: Fill Input Area below and then run this php file
/*-- INPUT AREA START --*/
    'usertoken'=>'',
    'appid'=>'',
    'appsecret'=>'',
    'pageid'=>''
/*-- INPUT AREA END --*/
];
echo 'Permanent access token is: <input type="text" value="'.generate_token($args).'"></input>';
function generate_token($args){
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.9/oauth/access_token?grant_type=fb_exchange_token&client_id={$args['appid']}&client_secret={$args['appsecret']}&fb_exchange_token={$args['usertoken']}")); // get long-lived token
    $longtoken=$r->access_token;
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.9/me?access_token={$longtoken}")); // get user id
    $userid=$r->id;
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.9/{$userid}?fields=access_token&access_token={$longtoken}")); // get permanent token
    if($r->id==$args['pageid']) $finaltoken=$r->access_token;
    return $finaltoken;
}
?>

부록 : (대안)

그래프 2.9 이후에는 간단히 를 클릭하여 긴 액세스 토큰을 얻는 번거 로움을 피할 수 있습니다. 아래쪽의 액세스 토큰 확장 액세스 토큰 디버거 도구 , 짧은 액세스 토큰을 디버깅 한 후. pageidlonglivedtoken에 대한 정보로 무장 한 후 영구 액세스 토큰을 얻으려면 아래의 PHP를 실행하십시오.

<?php
$args=[
/*-- Permanent access token generator for Facebook Graph API version 2.9 --*/
//Instructions: Fill Input Area below and then run this php file
/*-- INPUT AREA START --*/
    'longlivedtoken'=>'',
    'pageid'=>''
/*-- INPUT AREA END --*/
];
echo 'Permanent access token is: <input type="text" value="'.generate_token($args).'"></input>';
function generate_token($args){
$r=json_decode(file_get_contents("https://graph.facebook.com/v2.9/{$args['pageid']}?fields=access_token&access_token={$args['longlivedtoken']}"));
return $r->access_token;
}
?>

두 번째 코드는 많은 번거 로움을 덜어 주지만, pageid와 userid를 교차 검사하기 때문에 많은 PHP 코드를 실행하지 않는 것이 좋습니다. 실수로 사용자 토큰을 선택하면 두 번째 코드가 작동하지 않습니다.

덕분에 dw1Rob

8
Siddhant Rimal

나는이 단계들을 시도했다 : https://developers.facebook.com/docs/marketing-api/access#graph-api-Explorer

영구 페이지 액세스 토큰 얻기

  • 그래프 API 탐색기로 이동하십시오.
  • 응용 프로그램 을 선택하십시오 응용 프로그램
  • 수명이 긴 액세스 토큰 붙여 넣기 액세스 토큰
  • 액세스 토큰 옆에서 액세스 토큰을 사용할 페이지를 선택하십시오. 액세스 토큰이 새 문자열로 나타납니다.
  • 이 액세스 토큰의 속성을 보려면 i 를 클릭하십시오.
  • "Access Token Tool에서 열기"버튼을 다시 클릭하여 "Access Token Debugger"도구를 열고 속성을 확인하십시오

한 가지 팁은 페이지 언어가 영어 일 때만 효과가있었습니다.

6
Fabian

영구 액세스 토큰을 얻는 동안 언급 한 5 단계 도넛 . 그러나 5 단계에서 영구 액세스 토큰을 생성하는 동안 영구 액세스 토큰 (만료되지 않음)이 아닌 장기 액세스 토큰 (2 개월 동안 유효)을 반환합니다. 그래프 API의 현재 버전은 V2.5입니다. V2.5로 영구 액세스 토큰을 얻으려는 경우 액세스 토큰을 오래 보관하십시오. V2.2로 API 호출을 시도하십시오 (API API 탐색기에서 버전을 변경할 수없는 경우 API 호출 https://graph.facebook.com/v2.2/ {account_id}/accounts? access_token = {long_lived_access_token} V2.2의 새 탭) 영구 액세스 토큰 (만료되지 않음)

4
baji shaik

페이지 데이터 만 요청하면 페이지 액세스 토큰을 사용할 수 있습니다. 사용자 액세스 토큰을 얻으려면 한 번만 사용자를 인증하면됩니다. 유효 기간을 2 개월로 연장 한 다음 페이지 토큰을 요청하십시오. 이것은 모두 시나리오 5 에서 설명합니다. 획득 한 페이지 액세스 토큰은 사용자 액세스 토큰이 유효한 경우에만 유효합니다.

4
phwd

언급 된 방법 외에도 서버 간 애플리케이션의 경우 다음 형식의 영구 액세스 토큰을 사용할 수도 있습니다. app_id | app_secret이 유형의 액세스 토큰을 App Token이라고합니다. 그래프 API를 호출하고 애플리케이션 백엔드 내의 공용 노드를 쿼리하는 데 일반적으로 사용할 수 있습니다. 여기에 언급되어 있습니다 : https://developers.facebook.com/docs/facebook-login/access-tokens

3
azec-pdx

이 예제들 중 상당수는 작동하지 않습니다. 2.9v가 나오기 때문인지 모르겠지만, 저는 머리를 세게 치고있었습니다. 어쨌든 나는 @ dw1 버전을 가져다가 @KFunk 비디오의 도움으로 조금 수정했고 2.9에서 나를 위해이 일을 얻었다. 희망이 도움이됩니다.

$args=[
/*-- Permanent access token generator for Facebook Graph API version 2.9 --*/
//Instructions: Fill Input Area below and then run this php file
/*-- INPUT AREA START --*/
    'usertoken'=>'',
    'appid'=>'',
    'appsecret'=>'',
    'pageid'=>''
/*-- INPUT AREA END --*/
];
echo 'Permanent access token is: <input type="text" value="'.generate_token($args).'"></input>';
function generate_token($args){
    $r = json_decode(file_get_contents("https://graph.facebook.com/v2.9/oauth/access_token?grant_type=fb_exchange_token&client_id={$args['appid']}&client_secret={$args['appsecret']}&fb_exchange_token={$args['usertoken']}")); // get long-lived token
    $longtoken=$r->access_token;
    $r=json_decode(file_get_contents("https://graph.facebook.com/{$args['pageid']}?fields=access_token&access_token={$longtoken}")); // get user id
    $finaltoken=$r->access_token;
    return $finaltoken;
}
1
Cesar Bielich

@donut 덕분에 자바 스크립트에서 만료되지 않는 액세스 토큰을 얻을 수있었습니다.

// Initialize exchange
fetch('https://graph.facebook.com/v3.2/oauth/access_token?grant_type=fb_exchange_token&client_id={client_id}&client_secret={client_secret}&fb_exchange_token={short_lived_token}')
.then((data) => {
    return data.json();
})
.then((json) => {
    // Get the user data
    fetch(`https://graph.facebook.com/v3.2/me?access_token=${json.access_token}`)
    .then((data) => {
        return data.json();
    })
    .then((userData) => {
        // Get the page token
        fetch(`https://graph.facebook.com/v3.2/${userData.id}/accounts?access_token=${json.access_token}`)
        .then((data) => {
            return data.json();
        })
        .then((pageToken) => {
            // Save the access token somewhere
            // You'll need it at later point
        })
        .catch((err) => console.error(err))
    })
    .catch((err) => console.error(err))
})
.catch((err) => {
    console.error(err);
})

그런 다음 이처럼 저장된 액세스 토큰을 사용했습니다.

fetch('https://graph.facebook.com/v3.2/{page_id}?fields=fan_count&access_token={token_from_the_data_array}')
.then((data) => {
    return data.json();
})
.then((json) => {
    // Do stuff
})
.catch((err) => console.error(err))

나는 다소 혼란 스럽기 때문에 누군가이 코드를 다듬을 수 있기를 바란다. 그러나 내가 생각할 수있는 유일한 방법이었다.

1

응용 프로그램 요청 한도에 도달했습니다 (# 4) - FB API v2.1 이상

이 대답은 나를 "궁극적 인 대답"으로 이끌었고 그래서 그것은 매우 관련되어 있으므로 여기에 그것을 덧붙이고 있습니다. 위와 관련되어 있지만 FB는 프로세스를 단순화 한 것으로 보입니다.

FB가 API를 v 2.1로 롤오버했을 때 Google 사이트의 공유 횟수가 줄어 들었습니다. 우리의 경우에는 이미 FB APP가 있었고 우리는 FB 로그인을 사용하지 않았습니다. 그래서 우리가해야 할 일은FB APP Token새로운 요청을하는 것이 었습니다. 이것은 2016 년 8 월 23 일을 기점으로합니다.

  1. 이동 : https://developers.facebook.com/tools/Explorer
  2. Api 버전을 선택하고 GET을 사용하여 다음을 붙여 넣습니다.

    /oauth/access_token?client_id={app-id}&client_secret={app-secret}&grant_type=client_credentials
    

    앱 페이지에서app idapp secret을 가져오고 싶을 것입니다. 메인 FB 애플리케이션 개발자 페이지

  3. 그래프 쿼리를 실행하면 다음과 같이 표시됩니다.

    {
       "access_token": "app-id|app-token",
       "token_type": "bearer"
    }
    

    어디에

    'app-id'
    "app-token"
    FB 앱 페이지의 앱 ID와 방금받은 FB 앱 해시가 생성됩니다.
  4. 다음으로 새로운 APP 액세스 토큰을 테스트하십시오 : FB 액세스 토큰 테스터

  5. 붙여 넣기를하면

    "app-token"
    만료 날짜/시간이없는 단일 응용 프로그램 기반 토큰 인 토큰 테스터에 저장됩니다.

우리의 경우 우리는 FB js sdk를 사용하고 있으므로 전화가 너무 바뀌 었습니다 (주의하십시오공유 횟수 만공유 및 주석이 아님) 카운트 결합 예전과 같이) :

FB.api(
    '/','GET',{
    // this is our FB app token for our FB app 
        access_token: FBAppToken,
        "id":"{$shareUrl}","fields":"id,og_object{ engagement }"
}

이제 제대로 작동합니다. FB를 통해 많은 검색과 공식 버그 리포트를 작성하여 FB API에 대한 토큰 화 된 요청을 시작해야한다는 것을 확인했습니다. 제쳐두고 나는 그들 (FB)이 토큰 화 된 요청을 언급하는 오류 코드 (# 4)에 단서를 추가하도록 요청했다.

방금 요청한 토큰 화 요청에 따라 FB 코멘트 수가 너무 많이 나왔다는 보고서가 나왔습니다. 그래서 필자는이를 적절히 업데이트 할 것입니다.

1
wittmason

페이스 북 앱이 있다면 app-id & app-secret을 사용해보십시오.

처럼 :

access_token={your-app_id}|{your-app_secret}

토큰을 자주 변경할 필요가 없습니다.

0
Niko Jojo

나는 이 답변이 도구 가 정말로 많은 도움이된다는 것을 발견했습니다.

나는이 대답이 당신이 이것을 읽을 때 여전히 유효하기를 바랍니다.

0
Bamboomy