57

更新:Facebookのoffline_access許可は廃止されています。詳細については、公式ドキュメントを参照してください。2012年5月1日
まで、この設定は無効になります。詳細については、開発者ロードマップを参照してください。


フェイスブックとグーグルで文字通り1日検索した後、一見シンプルに見えることを行うための最新の実用的な方法を探しました。

Facebookアプリのユーザーのoffline_accessを取得し、これ(セッションキー)を使用して、ブラウザーの友達やプロファイルデータ内ではなく、オフラインで取得するための段階的な説明を探しています。

できれば、FbJavaAPIでこれを実行します。

ありがとう。

そして、はい、私はFacebookwikiをチェックしました。

更新:誰か?

これ: http://www.facebook.com/authorize.php?api_key=<api-key>&v=1.0&ext_perm=offline_access offline_Accessを取得しますが、session_keyを取得する方法は?

Facebookが簡単なドキュメントを作成できないのはなぜですか。600人ほどの人がそこで働いているということですか?

一見同じ質問: offline_accessをFacebookで動作 させるにはセッションキーを取得する方法に答えません

編集:私はまだそれに固執しています。まだ誰もそのようなバッチアクセスを実際に試したことがないと思います...

4

7 に答える 7

63

新しい Facebook Graph API により、物事は少し単純になりましたが、文書化されたものははるかに少なくなりました。サーバー側のみ(ブラウザセッションの一部ではない)のphpスクリプトからウォールポストをロードできるようにするために私がしたことは次のとおりです。

  1. このプロジェクトで使用できる Facebook アプリケーションがまだない場合は作成し、 http://www.facebook.com/developers/apps.php#!/developers/createapp.php サンドボックス/開発者モードをオンに設定します。@ 詳細設定 > サンドボックス モード > 有効化 (アプリケーションの開発者のみが表示できるようにします。) そのアプリケーションの開発者アカウントの概要に記載されているアプリケーション ID (APP_ID) と秘密鍵 (SECRET_KEY) が必要ですが、古い API キー。

  2. ブラウザにロードし、サーバー側アプリを接続するアカウントとして fb にログイン済みで、要求されたアクセス許可に対して [許可] をクリックします。 https://graph.facebook.com/oauth/authorize?client_id=APP_ID&scope=offline_access,read_stream&redirect_uri=http://www.facebook.com/connect/login_success.html

  3. 結果の URL のクエリ文字列から「code」パラメーターをコピーし、それを次のように使用します: https://graph.facebook.com/oauth/access_token?client_id=APP_ID&redirect_uri=http://www.facebook.com/connect/login_success.html&client_secret=APP_SECRET&code=CODE_FROM_2 そして、結果のページのテキストで access_token= の右側をコピーします。これは次の構造になります: APP_ID|HEXNUM-USER_ID|WEIRD_KEY

  4. 今、ala を取得した宣誓アクセス トークンを使用して、グラフ API または従来の REST API からダウンロードします (ここで、SOURCE_ID は、ユーザー/グループ/検索対象の Facebook ID です)。

    <?php
    $stream = json_decode(file_get_contents("https://api.facebook.com/method/stream.get?source_ids=SOURCE_ID&access_token=ACCESS_TOKEN&format=json"));
    var_dump($stream);
    // this one gives a 500 internal server error from the http get if any of the fields are invalid, but only in php, not when loaded in a browser... weird.
    $feed = json_decode(file_get_contents("https://graph.facebook.com/SOURCE_ID/feed?fields=id,from,created_time,link,type&access_token=ACCESS_TOKEN"));
    var_dump($feed);
    ?>
    

グラフ api と残りの api は異なる構造だけでなく、異なる情報も返すことに注意してください。新しいグラフのフィールドを制限できるのは好きですが、ここでは残りの api (最初のもの) からの結果を好みます。 api (2 つ目)。

公式の (まばらな) 詳細については、 http://developers.facebook.com/docs/authentication/のセクション「拡張アクセス許可のリクエスト」および「Web アプリケーションでのユーザーの認証」を参照してください。

これを定期的に、つまりプログラムで行いたい場合は、手順 2 と 3 の自動バージョンを次に示します。

これを「facebook_access_token.php」として Web サーバーに配置します。

<?php $token = explode('=', file_get_contents("https://graph.facebook.com/oauth/access_token?client_id=APP_ID&redirect_uri=http://$_SERVER[SERVER_NAME]$_SERVER[PHP_SELF]&client_secret=APP_SECRET&code=" . 
(get_magic_quotes_gpc() ? stripslashes($_GET['code']) : $_GET['code']))); 
echo $token[1]; 
// store this, the access token, in the db for the user as logged in on your site -- and don't abuse their trust! ?>

また、ブラウザでユーザーを次のように誘導します。 https://graph.facebook.com/oauth/authorize?client_id=APP_ID&scope=offline_access,read_stream&redirect_uri=http://www.example.com/facebook_access_token.php

于 2010-07-14T19:31:30.937 に答える
11

最終的に PHP を使用したい場合は、Facebook PHP SDK v3 ( github を参照) を使用するのは非常に簡単です。アクセス許可を持つユーザーをログに記録するにoffline_accessは、ログイン URL を生成するときに確認します。これがその方法です。

オフライン アクセス トークンを取得する

まず、ユーザーがログインしているかどうかを確認します。

require "facebook.php";
$facebook = new Facebook(array(
    'appId'  => YOUR_APP_ID,
    'secret' => YOUR_APP_SECRET,
));

$user = $facebook->getUser();

if ($user) {
  try {
    $user_profile = $facebook->api('/me');
  } catch (FacebookApiException $e) {
    $user = null;
  }
}

offline_accessそうでない場合は、許可を求める「Facebook でログイン」URL を生成します。

if (!$user) {
    $args['scope'] = 'offline_access';
    $loginUrl = $facebook->getLoginUrl($args);
}

次に、テンプレートにリンクを表示します。

<?php if (!$user): ?>
    <a href="<?php echo $loginUrl ?>">Login with Facebook</a>
<?php endif ?>

その後、オフライン アクセス トークンを取得して保存できます。それを取得するには、次のように呼び出します。

if ($user) {
    $token = $facebook->getAccessToken();
    // store token
}

オフライン アクセス トークンを使用する

ユーザーがログインしていないときにオフライン アクセス トークンを使用するには:

require "facebook.php";
$facebook = new Facebook(array(
    'appId'  => YOUR_APP_ID,
    'secret' => YOUR_APP_SECRET,
));

$facebook->setAccessToken("...");

これで、このユーザーに対して API 呼び出しを行うことができます:

$user_profile = $facebook->api('/me');

それが役立つことを願っています!

于 2011-05-28T16:58:20.340 に答える
6

少し前にブログでチュートリアルを行いました。プラグインなどは必要ありません。PHPで実行され、テストしました。私は主に壁の支柱のためにそれをしました、しかしあなたが認証した後、あなたはあなたが望むどんな機能でも使うことができます。

編集:投稿はもう存在しません。とにかくFBAPIが更新されます...

于 2009-10-03T17:56:21.340 に答える
5

まず、認証ガイドのサーバー サイド フローのセクションを読むことから始めます。基本的に、次の URL から始めます。

https://www.facebook.com/dialog/oauth

アプリケーション ID (ここで入手可能) を URL に追加します。OAuth 用語では次のclient_idとおりです。

https://www.facebook.com/dialog/oauth?client_id=184484190795

offline_access アクセス許可を追加するかscope、OAuth 用語で:

https://www.facebook.com/dialog/oauth?client_id=184484190795&scope=offline_access

redirect_uriユーザーが承認ステップを完了した後に Facebook がリダイレクトする先の を追加します (「許可する」または「許可しない」、応答形式についてはドキュメントを参照するか、試してみてください)。

https://www.facebook.com/dialog/oauth?client_id=184484190795&scope=offline_access&redirect_uri=https%3A%2F%2Ffbrell.com%2Fecho

上記のリンクをたどると、プロンプトが表示され、[許可/許可しない] をクリックすると、リクエストを「エコー」するページに移動します。[許可] をクリックすると、パラメーターが返されます。これは、サーバーから Facebook に HTTP 要求を行うcodeことで交換できます。これは、次のような処理を行います。access_token

https://graph.facebook.com/oauth/access_token?client_id=184484190795&client_secret=XXX&code=YYY&redirect_uri=ZZZ

を渡す必要がありclient_idます。アプリケーション シークレットは、以前に使用したものとclient_secret同じで、応答として受け取った として渡す必要があります。これにより、そのユーザーの有効化が返されます。redirect_uricodeoffline_accessaccess_token

ただし、心に留めておくべきことの 1 つはoffline_access、アプリケーションが無効または期限切れの access_tokens を適切に処理する必要がある場合でも、さまざまな理由で発生する可能性があることです。

于 2011-07-19T03:35:40.627 に答える
3

Java と JavaScript の 2 つのソリューションを知っています。

ジャワ:サーブレット コード (関連する jar をインポートすることを忘れないでください):

String url="http://www.facebook.com/login.php?api_key=YOUR_API_KEY&v=1.0";
url+="&fbconnect=true&return_session=true&req_perms=offline_access,status_update";
url+="&next=http://YOUR_FaceBookCallback_SERVLET"; 
response.sendRedirect(url);
return;

// Facebook にログインして拡張アクセス許可を許可するよう求めるプロンプトが表示されます

b. (Facebook アカウント アプリケーションで) ConnectUrl をhttp://YourUrlFromWhereDoYouTurnToTheServletAboveとして定義することを忘れないでください

c. 次のコードを使用して、別のサーブレット: YOUR_FaceBookCallback_SERVLET (上記を参照) を作成します。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String session = request.getParameter("session");
//from this string you can obtain your infinite session_key.In order to do this, parse this string as JSON.
//Save it in the database or in the other data storage  
response.sendRedirect(ThePlaceThatYouWant);}

d. この秘密の session_key を次のように使用します。

FacebookXmlRestClient  client = new FacebookXmlRestClient(YOUR_API_KEY, FACEBOOK_APPLICATION_SECRET,SECRET_SESSION_KEY);
client.setIsDesktop(false); 
client.users_setStatus("YourMessage");

JavaScript ソリューション (セキュリティの大きな穴) が必要な場合は、私に連絡してください。

于 2009-09-01T17:17:45.123 に答える
2

何度も試行錯誤し、その時間を費やすことができた他のすべての生産的な方法について疑問に思った後、オフラインアクセスの無限セッションキーを「取得」する方法を見つけました... Facebookのドキュメントが多くなる可能性があることに同意しますより良い

1) facebook-java-api.. を使用している場合は、オフライン アクセスを要求するための URL をフォーマットする方法について、「モバイル Web」の facebook デモ サイトを参照してください
http://itsti.me/index.php

<a href="http://www.facebook.com/connect/prompt_permissions.php?api_key=YOUR_API_KEY&ext_perm=publish_stream%2Coffline_access&next=http%3A%2F%2Fmysite%2Ffacebookconnect&cancel=http%3A%2F%2Fmysite%2Fhome&display=wap"><img alt="Connect" src="http://static.ak.fbcdn.net/images/fbconnect/login-buttons/connect_light_medium_long.gif" id="fb_login_image"/></a>

2)セッションからオフラインセッションキーを取得する方法について..秘訣は、オフラインアクセスを許可した直後にFacebookがユーザーを「次の」URLにリダイレクトする場合、Facebookセッションを「再度」取得する必要がある..この新しいセッション無限のセッション キーを持ちます。
これはモバイル Web の例です...通常の Web サイトの場合は理解できるはずです.auth_token はモバイル Web サイトでのみ使用されます.通常の Web サイトでは必要ない場合があります

FacebookJsonRestClient fbc = new FacebookJsonRestClient(MY_API_KEY, SECRET, sessionKey);
String auth_token = request.getParameter("auth_token");
System.out.println("infinite session kEY = " +   fbc.auth_getSession(auth_token));
于 2009-11-05T17:18:42.970 に答える
0

セッション アクセスには、facebook php api によって提供される loginurl を使用する必要がありました。これは、return_session や session_version など、認証リクエストで送信される 2/3 の追加変数があるように思われるためです。また、新しい php5-sdk は、リクエストをhttps://graph.facebook.com/oauth/authorizeではなく login.facebook.com に送信します。これが私がそれをどのように解決したかです:

$b=new facebook(array('appId'=>APP_ID,'secret'=>SECRET))

認証を求めるには:

$facebook->getLoginUrl(array('next'=>$redirect_uri,'req_perms'=>$scope))

$scope に offline_access を含めることを忘れないでください。このページにリダイレクトされると (fb にログインして権限を付与した後)、json 形式の $_GET['session'] が作成されます。

好きな場所に保存するだけです(データベースに保存します)。次にユーザーのアカウントで何かをしたい場合は、次のようにします。

$session = json_decode($db->query("SELECT ..."));//get session from db $this->facebook->setSession($session);

この後、API が行うすべてのリクエストは、このユーザーのアクセスを介して行われます。

現在の facebook グラフ API の最悪の点は (間違っていたら訂正してください) 現在の API がすべてのドキュメントでセッション (古い API から残っているようです) を無視し、access_token についてのみ話していることです。しかし、現在の API (php5-sdk) には、access_token のみを使用して実際のリクエストを送信する機能がありません。access_tokenだけを使ってセッションを開始する機能があれば、私はそれを知りません。

于 2011-01-29T15:23:15.393 に答える