210

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

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

編集: @phwd のヒントに感謝します。offline_accessもう存在しない場合でも、永続的なページ アクセス トークンを取得する方法のチュートリアルを作成しました。

編集:ここで回答されていることがわかりました:サーバーがFBページ情報をプルするための長期的なFBアクセストークン

4

18 に答える 18

672

Facebook の拡張ページ トークン ドキュメントに記載されている手順に従って、有効期限のないページ アクセス トークンを取得できました。

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

0. Facebook アプリを作成する

アプリを既にお持ちの場合は、手順 1 に進みます。

  1. [マイ アプリ]に移動します。
  2. 「+ 新しいアプリを追加」をクリックします。
  3. ウェブサイト アプリをセットアップします。

パーミッションなどを変更する必要はありません。アクセス トークンの使用が完了する前に消えないアプリが必要なだけです。

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

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

Graph API Explorer は使用できません。何らかの理由で、このリクエストでスタックします。レスポンスが JSON ではなく、クエリ文字列だからだと思います。GET リクエストなので、ブラウザで URL にアクセスするだけです。

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

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

「ABC123」は、長期間有効なアクセス トークンになります。これをAccess Token Debuggerに入れて確認できます。「有効期限」の下には、「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} /accounts?access_token= {long_lived_access_token}

JSON 応答dataには、ユーザーがアクセスできるアイテムの配列が下にあるフィールドが必要です。パーマネント アクセス トークンが必要なページのアイテムを見つけます。フィールドにはaccess_tokenパーマネント アクセス トークンが必要です。それをコピーしてAccess Token Debuggerでテストします。「Expires」の下に「Never」と表示されます。

于 2015-02-09T20:14:26.687 に答える
11

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

于 2013-11-09T00:00:27.483 に答える
7

次の手順を試しました: https://developers.facebook.com/docs/marketing-api/access#graph-api-explorer

パーマネント ページ アクセス トークンを取得する

  • Graph API エクスプローラーに移動
  • アプリケーションアプリを選択します
  • 長期間有効なアクセス トークンをAccess Tokenに貼り付けます
  • [アクセス トークン] の横で、アクセス トークンが必要なページを選択します。アクセス トークンが新しい文字列として表示されます。
  • iをクリックして、このアクセス トークンのプロパティを表示します
  • 「アクセストークンツールで開く」ボタンを再度クリックして、「アクセストークンデバッガー」ツールを開き、プロパティを確認します。

1つのヒント、ページの言語が英語の場合にのみ機能しました。

于 2016-12-15T12:26:26.407 に答える
4

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

于 2013-06-19T17:57:38.707 に答える
4

パーマネント アクセス トークンを取得している間、Donutが述べたように、上記の 5 つの手順に従いました。ただし、永久アクセストークンを生成する際の5番目のステップでは、永久アクセストークン(期限切れになることはありません)ではなく、長寿命のアクセストークン(2か月間有効)を返します。私が気付いたのは、Graph API の現在のバージョンが V2.5 であることです。V2.5 でパーマネント アクセス トークンを取得しようとしている場合は、長期間有効なアクセス トークンを提供します。V2.2 で API 呼び出しを行ってみてください (グラフ API エクスプローラーでバージョンを変更できない場合は、API 呼び出しhttps: //graph.facebook.com/v2.2/ {account_id}/accounts?access_token={long_lived_access_token} V2.2の新しいタブで) すると、永続的なアクセス トークンが取得されます (期限切れになることはありません)。

于 2016-03-20T03:25:02.933 に答える
3

前述の方法に加えて、サーバー間アプリケーションでは、次の形式の永久アクセス トークンも使用できることに注意してください。 app_id|app_secret このタイプのアクセス トークンは、アプリ トークンと呼ばれます。一般に、Graph API を呼び出して、アプリケーション バックエンド内のパブリック ノードを照会するために使用できます。ここで言及されています:https://developers.facebook.com/docs/facebook-login/access-tokens

于 2015-03-08T16:47:17.230 に答える
2

@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))

ちょっと面倒なので、誰かがこのコードをトリミングできることを願っていますが、それが私が考えることができる唯一の方法でした。

于 2019-01-07T17:41:11.643 に答える
1

アプリケーション リクエストの制限に達しました (#4) - FB API v2.1 以降

この回答は私を「私たちにとっての究極の回答」に導いたので、非常に関連しているので、ここに追加します。上記に関連していますが、それは異なり、FBはプロセスをいくつか簡素化したようです。

FB が API を v 2.1 にロールオーバーしたときに、サイトでの共有カウントが機能しなくなりました。私たちの場合、すでに 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
    

    アプリのページからアプリ IDアプリ シークレットを取得します。メインの FB Apps 開発者ページ

  3. グラフ クエリを実行すると、次のように表示されます。

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

    どこ

    「アプリID」
    「アプリトークン」
    FB アプリ ページのアプリ ID と、生成されたばかりの FB アプリ 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 の公式バグ レポートが必要でした。余談ですが、トークン化されたリクエストについて言及しているエラー コード (#4) に手がかりを追加するよう、彼ら (FB) に依頼しました。

開発者の 1 人から、トークン化されたリクエストが新たに必要になったため、FB のコメント数も壊れているという別のレポートを受け取ったので、それに応じて更新します。

于 2016-08-23T15:12:13.063 に答える
1

これらの例の多くは機能しません。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;
}
于 2017-06-19T21:09:50.730 に答える