web-dev-qa-db-ja.com

Facebookオフラインアクセスの手順

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


FacebookとGoogleで文字通り1日間検索して、一見シンプルに見える何かを行うための最新のworking方法を探した後:

私はFacebookアプリのユーザーのoffline_accessを取得するためのステップバイステップの説明を探しており、これを使用してブラウザの友人とプロフィールデータではなくオフラインを取得します。

Fb Java API。

ありがとう。

そして、はい、facebook wikiを確認しました。

更新:誰ですか?

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

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

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

編集:私はまだそれで立ち往生しています。まだそのようなバッチアクセスを実際に試した人はいないと思います...

57
Ben

新しい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を取得したoathアクセストークンを使用して、グラフ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とREST APIは異なる構造だけでなく、異なる情報も返すことに注意してください。したがって、ここでは、新しいグラフのフィールドを制限できるのに、残りのAPI(最初のAPI)からの結果を好みます。 api(2番目)。

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

これを定期的に、つまりプログラムで実行する場合は、ステップ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

63
Chris

Facebook PHP SDK v3( githubを参照 )で最終的にPHPを使用したい場合、それは非常に簡単です。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;
  }
}

そうでない場合は、「Facebookでログイン」URLを生成して、offline_access権限を要求します。

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

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

11
Quentin

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

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

6
Jonathan Reyes

認証ガイドの Server Side Flow セクションを読むことから始めます。基本的に、次のURLから始めます。

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

application idこちらから入手可能 )をURLに追加します。OAuth parlance client_id ::

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

offline_accesspermission またはscope in OAuth parlance:

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

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

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

client_idを渡す必要があります。application secretclient_secretとして渡す必要があります。同じredirect_uri先ほど使用したものと、応答として受け取ったcode。これにより、そのユーザーのoffline_access enabled access_tokenが返されます。

ただし、offline_accessをリクエストした場合でも、アプリケーションは無効または期限切れのaccess_tokenを適切に処理する必要があります。これはさまざまな理由で発生する可能性があるためです。

5
daaku

私は2つの解決策を知っています:JavaとJavaScript

Java:a。サーブレットコード(関連する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。 ConnectUrlを(Facebookアカウントアプリケーションで) 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ソリューション(セキュリティの大きな穴)を望んでいるなら私に書いてください

3
Leonid L

たくさんの髪を分割し、試行錯誤を繰り返した後、オフラインアクセスの無限セッションキーを「取得」する方法を見つけました。その時間を費やすことができた他の生産的な方法について疑問に思いました。より良い

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));
2
Naren

セッションアクセスには、face_php api 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が行うリクエストは、このユーザーのアクセスを介して行われます。

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

0
Nemo