facebook:永続的なページアクセストークン?


193

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

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

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

編集:私はそれがここで答えられていることを発見しました:サーバーがFBページ情報をプルするための長期的なFBアクセストークン



確かにそうです。私はより良い肩書きを持っています、彼はより詳細な質問をしていて、私たち二人はほぼ同じ答えを受け入れました。
Vlasec

回答:


638

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とシークレット、および前のステップで生成された有効期間の短いトークンを入力します。

あなたは、グラフAPI Explorerを使用することはできません。なんらかの理由で、このリクエストでスタックします。それは、応答がJSONではなく、クエリ文字列だからだと思います。これはGETリクエストなので、ブラウザでURLにアクセスするだけです。

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

{" access_token ": " ABC123 "、 "token_type": "bearer"、 "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} / accounts?access_token = {long_lived_access_token}

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


14
Facebookはこれを台無しにしたので、もう機能しません。:-(上記のステップ1.5([Get Access Token]ボタンをクリック)の後、次のダイアログに「Submit for Login Review-以下の権限の一部はFacebookによる使用が承認されていません」という赤い警告が表示され、 「アプリはFacebookに投稿できません」というテキストが付いた南京錠が同時に下に表示されます。したがって、上記のステップ1.5と1.6の間に新しいステップを挿入し、「アプリで多くの面倒な作業を行う必要があります。その後、審査のためにそれを提出し、その後祈ると待機「:-(誰もが純粋なテストアプリケーションのために、この回避する方法を知っている。?
QuestionOverflow

10
最後のステップにmessage: "(#100) Tried accessing nonexisting field (accounts) on node type (Page)", type: "OAuthException", code: 100 到達し、ブラウザが戻るだけの場合:FB Access Token Debuggerに移動して、long_lived_access_tokenをテストします。一貫して、数分後に戻ってlong_lived_access_tokenを再確認すると、FBアクセストークンデバッガーは、そのトークンが永続的であることを示します(有効期限:なし)
AdjunctProfessorFalcon

14
私がこの答えを読んでいなかったとしたら、私はまだ短命のトークンで頭を壁にぶつけているでしょう...最後の部分が機能していないことは残念です... (#100) Tried accessing nonexisting field (accounts) on node type (Page)エラーが発生しています。ステップ5に進むことができません...それでもありがとう... LE:@Vlasecによって提供された回答の最後の部分を確認してください。/ {pageId}?fields = access_token&access_token = {long_lived_access_token}をクエリすることで永続的なアクセストークンを取得できるため、問題は修正されています。
Mujnoi Gyula Tamas、2015

15
:それもV2.7のために、存在しない「アカウント」と言うと、私の永久的なアクセストークンを取得するために最後のステップのためにこれを使用していたhttps://graph.facebook.com/v2.7/{page_id}?fields=access_token&access_token={long_lived_access_token}
Reado

5
最後のステップで、次の例外が発生します{"error":{"message": "Syntax error \" Expected end of string代わりに\ "?\"。\ "at character 11:access_toke \ u200c \ u200bn" 、 "type": "OAuthException"、 "code":2500、 "fbtrace_id": "A8 + gtSaShIO"}}誰でもそれを解決する方法を知っていますか????
Lucy

89

以下は、Graph API ExplorerAccess Token Debuggerのみを使用した私のソリューションです。

  1. グラフAPIエクスプローラー:
    • 右上のドロップダウンメニューからアプリを選択します
    • ドロップダウン(アクセストークンフィールドの右側)から[ユーザーアクセストークンを取得]を選択し、必要な権限を選択します
    • ユーザーアクセストークンをコピー
  2. アクセストークンデバッガー:
    • コピーしたトークンを貼り付け、「デバッグ」を押します
    • 「アクセストークンの拡張」を押して、生成された長期間有効なユーザーアクセストークンをコピーします
  3. グラフAPIエクスプローラー:
    • コピーしたトークンを[アクセストークン]フィールドに貼り付けます
    • 「PAGE_ID?fields = access_token」でGETリクエストを作成します
    • 永続的なページアクセストークンを応答で見つけます(ノード "access_token")
  4. (オプション)アクセストークンデバッガー:
    • 永久トークンを貼り付けて、「デバッグ」を押します
    • 「Expires」は「Never」である必要があります

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


3
押す「拡張トークン」ボタンはありません。多分彼らはそれを取り出した。
Cesar Bielich 2017年

4
「拡張」ボタンが表示されます
エドゥアルド

2
アクセストークンを拡張(ステップ2)して再度デバッグした後は、期限切れになりません。あなただけの手順3と4を渡すことができます
daniel_serretti

1
上記の回答よりも理解しやすいこの回答に感謝します。それは本当に役に立ちました。
Paul Laffitte、2017年

2
ああ、あなたは燃えています!本当にありがとう!アプリを適切にデバッグできなかったため、このオプションを見つけるのに多くの時間を費やしました。
Killuminati

11

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


3
これはもう機能しません。トークンは1時間しか持続しません
flashsnake 2016年

@flashsnakeこれをv2.8で実際にテストしましたか?トークンデバッガーがExpires Never
Bizmate

覚えていません。私はそれをテストしたかもしれません。
flashsnake 2017

11

簡単にするために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;
}

1
+1試したところ、これらの部分的に価値が下がるすべての回答の中で、驚くほどうまくいきました!あちこちで少し編集するだけで将来の変更が簡単になるので、私はこの答えが好きです。
Siddhant Rimal 2017

この回答を編集することはできませんでした。そこで、Graph API 2.9の場合、代わりに別の答えを書きました。
Siddhant Rimal 2017

これらの例はどれも機能しないため、2.9で変更されたようです
Cesar Bielich

10

生活を楽にするためのもう1つの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;
}
?>

補遺:(代替)

Graph 2.9以降では、短いアクセストークンをデバッグした後、Access Token Debuggerツールの下部にある[ Extend Access Token ]をクリックするだけで、長いアクセストークンを取得する手間を省くことができます。およびに関する情報で武装し、以下のphpを実行して永続的なアクセストークンを取得します。pageidlonglivedtoken

<?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番目のコードは手間を大幅に節約しますが、ページIDとユーザーIDをクロスチェックするため、急いでいない限り、最初のphpコードを実行することをお勧めします。誤ってユーザートークンを選択しても、2番目のコードは機能しません。

dw1Robに感謝


[アクセストークンの拡張]ボタンがありません。何か不足していますか?
Cesar Bielich 2017年

@CesarBielich:最初にショートアクセストークンをデバッグする必要があります。短いアプリトークンをデバッグすると、結果の下に表示されます。表示されないため、ユーザーアクセストークンをデバッグしている必要があります。この回答はアクセストークンの使用には適用されないことに注意してください。使用できるのはアプリアクセストークンのみです。ユーザーアクセストークンを永続的にすることはできません。ロングトークンまで生成できます。
Siddhant Rimal 2017年

1
@CesarBielichここで何か混乱していると思います。ユーザー、アプリ、ページのアクセストークンを作成できます。あなたはする必要があるアプリを選択代わりに、あなたが作成していることをGraph API Explorerあなたはトークンを要求できる前に、アプリケーションのフィールドに。
Siddhant Rimal 2017年

@CesarBielich:2番目の方法がわかりにくい場合は、最初の方法を使用してください。最初のフィールドの入力フィールドに入力するだけで、すべてが自動的に行われます:)
Siddhant Rimal

申し訳ありませんが、昨夜作った別の投稿についてコメントしていましたlol。どういうわけか、私はあなたのものを働かせることができず、私を決して期限切れにしないトークンにできませんでした。私はv2.92番目の呼び出しでを削除する必要があり、それでうまくいきました。奇妙
セザールBielich

6

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

永続的なページアクセストークンを取得する

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

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


1
この男!!!5つの仮想ビール。これは、承認された回答のステップ5の代わりに機能します。グラフバージョン2.8
ルート-

1
Facebook APIを使用できるようになるまでに何週間も無駄にしてきました。これまでのところ、私が遭遇した中で最も混乱していて一貫性のないトークンです。このソリューションは引き続き完全に機能します。2017年10月
user919426

4

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


すみません、多分私は十分にはっきりしていませんでした。トークンについて読みました。ユーザーに許可を求め、トークンをアプリに転送する方法を学ぶだけです。唯一の目的が許可を求めることを目的としたFacebookの「アプリ」を作成する必要があるようですが、それは正しいですか?
Vlasec 2013年

1
ここで説明したように、アクセストークンを取得する唯一の方法は、アプリケーションを介している修正@Viasec developers.facebook.com/docs/facebook-login
phwd

おかげで、私はそれをどういうわけか無視したに違いありません。APIセクションのどこかにあると推測しましたが、これは誤りでした。それを見て、私の質問に答えてくれるといいのですが。
Vlasec 2013年

4

恒久的なアクセストークンを取得しながら、ドーナツが述べたように、上記の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の新しいタブに追加すると、永続的なアクセストークンを取得できます(有効期限はありません)。


結果を達成するためにAPIバージョンをさかのぼることは、特にAPIバージョンが特定の時間後に期限切れになるため、私が見つけた将来により多くの作業をもたらすだけです。
SlickRemix 2016

それはnullを返します:(ページアクセストークンを取得する方法?
Nancy thakkar

3

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


1
ページへのアクセスは許可されますか?私はそれはそうではないと思います、そしてその場合それは本当に質問に答えません。
Vlasec 2015年

@Vlasecパブリックポストのコメントにアクセスできます
Ali Gajani

1
それで十分な人もいるかもしれませんが、質問の答えにはなりません。
ヴラセク2017

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

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


2

Facebookのアプリをお持ちの場合は、app-idとapp-secretで試すことができます。

お気に入り :

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

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


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アプリ開発者ページ

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

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

    どこ

    「アプリID」
    そして
    「アプリトークン」
    FBアプリページのアプリIDと、受け取ったばかりの生成されたFBアプリHASHになります。

  4. 次に、新しいAPPアクセストークンをテストします。FBアクセストークンテスター

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

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


1
ログインを行い、アプリにアクセスを許可したのは、常にアプリのユーザーでした。とにかく、これはページアクセストークンを作成するようには見えないので、質問に対する有効な回答ではないと思います。興味深いですが、おそらくあなた自身のQ / Aを作成しますか?
Vlasec

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

すばらしいスニペットですが、この質問はPHPでそれを作成する方法ではなく、Javaまたは.NETでも実行できるAPI自体の使用方法に関するものです。たとえば、Javaで実行する必要がありました。疑似コードまたはステップバイステップガイドは、PHPを使用していない人にとってより便利です。
Vlasec 2017

2
@VlasecこのPHPスニペットはどの擬似コードにも非常に近く、非常に理解しやすいと思います。カザールはすでにFacebookから提供されているいくつかのAPIを使用しています。残りのものは自明です。
Siddhant Rimal 2018

0

2020年4月の時点で、以前の永続的なページトークンが1時間から12時間の間に期限切れになり始めました。manage_pages以前の目標(ページのイベントのポーリング)を達成する権限を持つユーザートークンの使用を開始しました。これらのトークンは永続的なもののようです。

github.com/k-funk/facebook_permanent_tokenでホストされているこの投稿にある情報に基づいてpythonスクリプトを作成し、必要なパラメーターと、永続的なトークンを取得するためのどのメソッドが機能しているかを追跡しました。


-1

私はこの回答を見つけましたがこれはこのツールに非常に役立ちました。

これを読んでも、この回答がまだ有効であることを願っています。


OK。ドーナツによる答えはまだ機能しますか、それともいくつかの追加の手順が必要ですか?
Vlasec 2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.