私はそのデータソースの一つとしてFacebookのページを持っているプロジェクトに取り組んでいます。 GUIを使用せずに定期的にデータをインポートします。それから、Webアプリを使って、すでに持っているデータを表示します。
すべての情報が公開されているわけではありません。これは、私は一度データにアクセスしてそれを保持しなければならないことを意味します。しかし、私はそのプロセスを知りませんし、それについてのよいチュートリアルもまだ見つけていません。私はaccess_token
が必要だと思います、どうやって段階的にユーザーからそれを得ることができますか?ユーザーはFacebookのページの管理者です、彼はページに私達のもののFBアプリを追加する必要があるでしょうか?
編集:先端をありがとう@phwd。 offline_access
がもう存在しなくても、永久的なページアクセストークンを取得する方法をチュートリアルで作りました。
編集:私はちょうどそれがここで答えられているのを見つけました: サーバーのFBページ情報を引っ張るための長期FBアクセストークン
Facebookのページに書かれている指示に従ってください 拡張ページトークンのドキュメント 期限切れにならないページアクセストークンを取得することができました。
特に明記しない限り、これらすべての手順に Graph API Explorer を使用することをお勧めします。
すでにappをお持ちの場合は、手順1に進んでください。
あなたはその権限や何かを変更する必要はありません。あなたはあなたがあなたのアクセストークンを使い終える前に消えない文句を言わないアプリを必要としています。
[アクセストークン]フィールドに表示されるトークンは、存続期間の短いアクセストークンです。
フォロー これらの指示 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ヶ月"のようなものがあるはずです。
長期アクセストークンを使用して、GETリクエストを実行します。
https://graph.facebook.com/v2.10/me?access_token={long_lived_access_token}
id
フィールドはあなたのアカウントIDです。次のステップでそれが必要になります。
にGETリクエストを送信する
https://graph.facebook.com/v2.10/{account_id}/アカウント?access_token ={long_lived_access_token}
JSONレスポンスにはdata
フィールドがあり、その下にユーザーがアクセスできるアイテムの配列があります。永久アクセストークンを取得したいページのアイテムを見つけます。 access_token
フィールドはあなたの永久アクセストークンを持つべきです。それをコピーして Access Token Debugger でテストしてください。 "Expires"の下には "Never"と表示されるはずです。
これは Graph API Explorer & Access Token Debugger のみを使った私の解決策です。
(APIバージョン2.9-2.11、3.0-3.1でテスト済み)
Vlasec の回答で推奨される手順に加えて、次のものを使用できます。
/{pageId}?fields=access_token&access_token=THE_ACCESS_TOKEN_PROVIDED_BY_GRAPH_Explorer
簡単にするために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;
}
生活を楽にするための別の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ツール にアクセスします。 pageid
とlonglivedtoken
に関する情報を得て、以下の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番目のコードは機能しません。
私はこれらの手順を試してみました: https://developers.facebook.com/docs/marketing-api/access#graph-api-Explorer
永久ページアクセストークンを取得する
一つのヒントは、ページ言語が英語英語の場合にのみ有効です。
恒久的なアクセストークンを取得している間、私は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の新しいタブでは、永久アクセストークン(期限切れにならない)
ページデータのみを要求している場合は、ページアクセストークンを使用できます。ユーザーアクセストークンを取得するには、ユーザーを1回承認するだけで済みます。それを2か月の有効期間まで延長してから、そのページのトークンを要求します。これはすべて シナリオ5 で説明されています。なお、取得したページアクセストークンは、ユーザーアクセストークンが有効である限り有効です。
前述の方法に加えて、サーバー間アプリケーションでは、この形式のパーマネントアクセストークンを使用することもできます。app_id | app_secretこのタイプのアクセストークンはApp Tokenと呼ばれます。一般的にはGraph APIを呼び出し、アプリケーションのバックエンド内でパブリックノードを問い合わせるために使用できます。それはここで言及されています: https://developers.facebook.com/docs/facebook-login/access-tokens
これらの例の多くは機能しません、それが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;
}
@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))
これはちょっと面倒なので誰かがこのコードをトリミングできるといいのですが、それが私が考えることができる唯一の方法でした。
アプリケーションリクエストの制限数に達しました(#4) - FB API v2.1以降
この答えが私を「私たちのための究極の答え」に導いたので、それは非常に関連しているので、ここに追加します。それは上記に関連していますがそれは異なっていて、FBがプロセスをいくらか単純化したようです。
FBがAPIをv 2.1にロールオーバーしたとき、私たちのサイトでの共有のカウントは機能しなくなりました。私たちの場合、私たちはすでにFB APPを持っていて、FBログインを使用していませんでした。だから私たちがする必要があったのは新しいリクエストをするためにFB APPトークンを取得することでした。これは2016年8月23日現在のものです。
APIバージョンを選択してからGETを使用して、以下を貼り付けます。
/oauth/access_token?client_id={app-id}&client_secret={app-secret}&grant_type=client_credentials
あなたはアプリIDとあなたのアプリの秘密をつかみに行きたいと思うでしょう。あなたのアプリページ。 メインFB Apps開発者ページ
グラフクエリを実行すると表示されます。
{
"access_token": "app-id|app-token",
"token_type": "bearer"
}
どこで
"app-id"そして
「アプリトークン」はあなたのFBアプリページからのあなたのアプリIDとあなたが今受け取った生成されたFB App HASHになります。
次に、新しいAPPアクセストークンをテストします。 FB Access Token tester
を貼り付けることによって、あなたは見るべきです
「アプリトークン」トークンテスターに、有効期限のない単一のアプリベースのトークン。
私たちの場合は、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のコメント数も同様に壊れているという別の報告を受けました。
Facebookのアプリがある場合は、app-idとapp-secretで試すことができます。
のような:
access_token={your-app_id}|{your-app_secret}
トークンを頻繁に変更する必要はありません。