web-dev-qa-db-ja.com

facebook:永久ページアクセストーク?

私はそのデータソースの一つとしてFacebookのページを持っているプロジェクトに取り組んでいます。 GUIを使用せずに定期的にデータをインポートします。それから、Webアプリを使って、すでに持っているデータを表示します。

すべての情報が公開されているわけではありません。これは、私は一度データにアクセスしてそれを保持しなければならないことを意味します。しかし、私はそのプロセスを知りませんし、それについてのよいチュートリアルもまだ見つけていません。私はaccess_tokenが必要だと思います、どうやって段階的にユーザーからそれを得ることができますか?ユーザーはFacebookのページの管理者です、彼はページに私達のもののFBアプリを追加する必要があるでしょうか?

編集:先端をありがとう@phwd。 offline_accessがもう存在しなくても、永久的なページアクセストークンを取得する方法をチュートリアルで作りました。

編集:私はちょうどそれがここで答えられているのを見つけました: サーバーのFBページ情報を引っ張るための長期FBアクセストークン

171
Vlasec

Facebookのページに書かれている指示に従ってください 拡張ページトークンのドキュメント 期限切れにならないページアクセストークンを取得することができました。

特に明記しない限り、これらすべての手順に Graph API Explorer を使用することをお勧めします。

0. Facebookアプリを作成する

すでにappをお持ちの場合は、手順1に進んでください。

  1. My Apps に移動します。
  2. [+新しいアプリを追加]をクリックします。
  3. Webサイトアプリを設定します。

あなたはその権限や何かを変更する必要はありません。あなたはあなたがあなたのアクセストークンを使い終える前に消えない文句を言わないアプリを必要としています。

1.ユーザの短命アクセストークンを取得する

  1. Graph API Explorer に行きます。
  2. アクセストークンを取得するアプリケーションを選択します([マイアプリ]メニューではなく、[アプリケーション]ドロップダウンメニューで)。
  3. [トークンの取得]> [ユーザーアクセストークンの取得]をクリックします。
  4. ポップアップの[Extended Permissions]タブで、[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とシークレット、および前の手順で生成した有効期限の短いトークンを入力します。

はGraph API Explorerを使用できません。どういうわけかそれはこの要求で立ち往生します。レスポンスはJSONではなくクエリ文字列だからだと思います。これはGETリクエストなので、ブラウザのURLにアクセスするだけです。

応答は次のようになります。

{"access_token": "ABC123"、 "token_type": "ベアラ"、 "expires_in":5183791}

"ABC123"はあなたの長命のアクセストークンです。これを Access Token Debugger に入れて検証することができます。 "Expires"の下には、 "2ヶ月"のようなものがあるはずです。

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}/アカウント?access_token ={long_lived_access_token}

JSONレスポンスにはdataフィールドがあり、その下にユーザーがアクセスできるアイテムの配列があります。永久アクセストークンを取得したいページのアイテムを見つけます。 access_tokenフィールドはあなたの永久アクセストークンを持つべきです。それをコピーして Access Token Debugger でテストしてください。 "Expires"の下には "Never"と表示されるはずです。

596
donut

これは Graph API ExplorerAccess Token Debugger のみを使った私の解決策です。

  1. Graph API Explorer:
    • 右上のドロップダウンメニューからアプリを選択します
    • ドロップダウン([アクセストークン]フィールドの右側)から[ユーザーアクセストークンを取得]を選択し、必要な権限を選択します。
    • ユーザーアクセストークンをコピーする
  2. アクセストークンデバッガ:
    • コピーしたトークンを貼り付けて「デバッグ」を押す
    • [Extend Access Token]を押して、生成された長命のユーザーアクセストークンをコピーします。
  3. Graph API Explorer:
    • コピーしたトークンを[アクセストークン]フィールドに貼り付けます
    • "PAGE_ID?fields = access_token"を指定してGETリクエストを行います。
    • 応答内の固定ページアクセストークンを検索します(ノード "access_token")
  4. (オプション)Access Token Debugger:
    • 恒久トークンを貼り付けて「デバッグ」を押す
    • 「期限切れ」は「しない」でなければなりません

(APIバージョン2.9-2.11、3.0-3.1でテスト済み)

75
Rob

Vlasec の回答で推奨される手順に加えて、次のものを使用できます。

  • Graph API Explorer クエリを作成します。 /{pageId}?fields=access_token&access_token=THE_ACCESS_TOKEN_PROVIDED_BY_GRAPH_Explorer
  • Access Token Debugger アクセストークンに関する情報を取得します。
11
chuycepeda

簡単にするためにPHPスクリプトを作成しました。 アプリを作成しますGraph API Explorer でアプリを選択し、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答え。 Facebook Graph 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以降では、 の下部にあるアクセストークンの延長をクリックするだけで、長いアクセストークンを取得する手間を省くことができます短いアクセストークンをデバッグした後に、Token Debuggerツール にアクセスします。 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;
}
?>

2番目のコードは面倒な手間を省きますが、pageidとuseridをクロスチェックするので、急いでいない限り、最初のphpコードを実行することをお勧めします。誤ってユーザートークンを選択しても、2番目のコードは機能しません。

dw1Rob に感謝します

8
Siddhant Rimal

私はこれらの手順を試してみました: https://developers.facebook.com/docs/marketing-api/access#graph-api-Explorer

永久ページアクセストークンを取得する

  • Graph API Explorerに移動します
  • アプリケーションアプリを選択します。
  • 有効期限の長いアクセストークンをアクセストークンに貼り付けます
  • アクセストークンの横にあるアクセストークンを使用するページを選択します。アクセストークンは新しい文字列として表示されます。
  • このアクセストークンのプロパティを表示するには、iをクリックしてください。
  • 「アクセストークンツールで開く」ボタンをもう一度クリックして「アクセストークンデバッガ」ツールを開き、プロパティを確認します。

一つのヒントは、ページ言語が英語英語の場合にのみ有効です。

6
Fabian

恒久的なアクセストークンを取得している間、私はDonutのように上記の5つのステップに従った。しかし、永久アクセストークンを生成している間の5番目のステップでは、永久アクセストークン(これは有効期限が切れることはありません)ではなく、長期間有効なアクセストークン(2か月間有効)を返します。私が気づいたのはGraph APIの現在のバージョンがV2.5だということです。あなたがV2.5で恒久アクセストークンを取得しようとしているなら、それは長命のアクセストークンを与えています。グラフAPIエクスプローラーでバージョンを変更することができないならば、APIコールを打ってください - https://graph.facebook.com/v2.2/ {account_id}/accounts?access_token = {long_lived_access_token} V2.2の新しいタブでは、永久アクセストークン(期限切れにならない)

4
baji shaik

ページデータのみを要求している場合は、ページアクセストークンを使用できます。ユーザーアクセストークンを取得するには、ユーザーを1回承認するだけで済みます。それを2か月の有効期間まで延長してから、そのページのトークンを要求します。これはすべて シナリオ5 で説明されています。なお、取得したページアクセストークンは、ユーザーアクセストークンが有効である限り有効です。

4
phwd

前述の方法に加えて、サーバー間アプリケーションでは、この形式のパーマネントアクセストークンを使用することもできます。app_id | app_secretこのタイプのアクセストークンはApp Tokenと呼ばれます。一般的にはGraph 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のおかげで、JavaScriptで期限切れのないアクセストークンを取得できました。

// 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にロールオーバーしたとき、私たちのサイトでの共有のカウントは機能しなくなりました。私たちの場合、私たちはすでにFB APPを持っていて、FBログインを使用していませんでした。だから私たちがする必要があったのは新しいリクエストをするためにFB APPトークンを取得することでした。これは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
    

    あなたはアプリIDとあなたのアプリの秘密をつかみに行きたいと思うでしょう。あなたのアプリページ。 メインFB Apps開発者ページ

  3. グラフクエリを実行すると表示されます。

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

    どこで

    "app-id"
    そして
    「アプリトークン」
    はあなたのFBアプリページからのあなたのアプリIDとあなたが今受け取った生成されたFB App HASHになります。
  4. 次に、新しいAPPアクセストークンをテストします。 FB Access Token tester

  5. を貼り付けることによって、あなたは見るべきです

    「アプリトークン」
    トークンテスターに​​、有効期限のない単一のアプリベースのトークン。

私たちの場合は、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 APIに対してトークン化されたリクエストを作成しなければならないことを確認するために、FBによる多くの検索と公式バグレポートが必要でした。余談ですが、私は彼らが(FB)トークン化されたリクエストに言及するエラーコード(#4)に手がかりを追加することを要求しました。

私たちの開発者の1人から、トークン化されたリクエストが新たに必要になったためにFBのコメント数も同様に壊れているという別の報告を受けました。

1
wittmason

Facebookのアプリがある場合は、app-idとapp-secretで試すことができます。

のような:

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

トークンを頻繁に変更する必要はありません。

0
Niko Jojo

この答え これは このツール という意味で、本当に役に立ちました。

あなたがこれを読んだとき、私はこの答えがまだ有効であると思います。

0
Bamboomy