0

Facebook グラフ API 検索でデータを取得するには、このような URL が必要です。

このurlを使用しようとすると、

{
   "error": {
      "message": "(#200) Must have a valid access_token to access this endpoint",
      "type": "OAuthException",
      "code": 200
   }
}

これをAndroidで使用します。誰かがこれを達成するために私を導いてくれますか?

4

1 に答える 1

2

Facebook の Graph API は、これを追加した最近まで公開されていましたaccess_token

ドキュメントから、一時的なアクセストークンを作成する方法を説明しています。残念ながら、この方法で作成すると、グラフを利用できるように、たまに access_token を更新する (つまり、既存のアクセス トークンを更新する/新しいアクセス トークンを生成する) ある種のジョブに対処する必要があります。 API。

ほとんどの場合、新しいアクセス トークンの更新または生成を処理するライブラリがいくつかありますが、それがアプリに適合しない可能性があります。

そこで、前述の「問題」を回避するために、無期限のアクセス トークンを持つ方法があることを発見しました。

次の手順を実行する必要があります。

  1. Facebook アカウントを作成します (アカウントを持っていない場合、または開発目的のためだけにアカウントを作成したい場合)。
  2. Facebook 開発者ページに移動します (開発者として登録し、アカウントを有効にするなど)
  3. Facebook 開発者アプリページで新しいアプリを作成する
  4. アプリに移動し、Settingsで をクリックしEdit Settingsます。
  5. に移動しSandbox Modeて選択しますDisabled
  6. 左側のSettingsセクションから、[Advanced] をクリックします。
  7. Authenticationセクションで、チェックしてApp Type選択しますWeb(まだ選択されていない場合)
  8. Basic最後の手順として、のセクションに戻ると、Settings2 つのアプリの詳細が表示されます。

    App IDApp Secret

    これらの 2 つのコードを使用して、次のaccess_tokenように有効期限が切れない を利用できます: APP ID|APP Secret(コード間の垂直バーを確認してください)

したがって、次のようなリクエストを作成できます。

https://graph.facebook.com/search?q=mark&access_token=APP_ID|APP_SECRET

URL でtype=user. あなたの場合、期限切れのアクセス トークンを作成する必要があります。次のような一時トークンをすばやく作成できます。

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

( Facebook のドキュメントのAccess Tokens ページを参照してください)。アクセス トークンの更新を自動的に処理するソリューションが見つからない場合は、時々更新するバックグラウンド ジョブを作成することで、私が行ったことを説明できます。

これにより、次のような応答が返されます。

access_token=NEW_ACCESS_TOKEN&expires=TIME_UNTIL_IT_EXPIRES.

私が覚えている限りでは、新しく作成したアクセス トークンを 60 日間問題なく使用できます (cron ジョブを使用して月に 1 回新しいトークンを生成する方が簡単でした)。

したがって、その応答があれば、簡単な正規表現をすばやく実行できます。

access_token=(.*)&expires=(.*)

そして、次のことができます:

String newAccessToken = matcher.group(1);

file/db テーブルの既存のアクセス トークンを置き換えれば完了です。

このアクセス トークンを使用すると、次のリクエストを行うことができます。

https://graph.facebook.com/search?q=mark&type=user&access_token=APP_ID|APP_SECRET
于 2013-07-30T08:29:39.283 に答える