崖っぷちの男

たぶん技術っぽいネタ。ブログ名が決められない

Facebookで自動投稿するアプリを作るときのAccess Token

まず最初に、このやり方であっているのか自分でも分かってません。

FacebookAPI の仕様が途中で変わるせいで、ブログ記事なんかを参考にしようとしても既に情報が古くなってたりします。

ひとまず今のところうまくいっている「自動投稿さえできればいいとき」の Access Token のとりかた。

自動投稿自体は適当なスクリプトでやるとして、Access Tokenを取得する方は以下のような php をWebアプリとしてでっちあげる。ちゃんとメモってなかったけど 確かこちらの Facebookのオフラインアクセストークンを得る方法 - 復興ログ スクリプトをコピペ改変したもの。

事前に ログイン | Facebook のアプリの設定で、「アプリをFacebookに結合する方法」のWebサイトのURLにこのWebアプリを置くサーバのURLを入れておく必要あり。

あと、アプリの詳細設定でひとまず「Sandbox Mode」は有効にしといた方が無難。「Deprecate offline access」も有効にしておく。

<?php
require 'php-sdk/src/facebook.php';

$facebook = new Facebook(array(
  'appId'  => '[App ID]',
  'secret' => '[App Secret]',
));

// Get User ID
$user = $facebook->getUser();

// To make API calls:
if ($user) {
  try {
    // Proceed knowing you have a logged in user who's authenticated.
    $user_profile = $facebook->api('/me');
  } catch (FacebookApiException $e) {
    error_log($e);
    $user = null;
  }
}

// Login or logout url will be needed depending on current user state.
if ($user) {
  $logoutUrl = $facebook->getLogoutUrl();
  echo $facebook->getAccessToken();
  echo '<br>';
  echo $logoutUrl;
} else {
$loginUrl = $facebook->getLoginUrl(array(
     'scope' => 'publish_stream'
   ));
  echo '<a href="' . $loginUrl . '">' . $loginUrl. '</a>';
}
?>

このアドレスにアクセスしてFacebookにログインすると Access Token がもらえる。けど割とすぐに有効期限が切れるので、以下のURLの3ヶ所を適宜書き換えてからアクセス。これでAccess Tokenの期限が60日にのびる。ちなみに連続で何回もやっても意味がない。何日かたってまた期限をのばしたい時は60日以内に上のWebアプリにアクセスしてからまたこのURLにアクセス。

https://graph.facebook.com/oauth/access_token?client_id=[App ID]&client_secret=[App Secret]&grant_type=fb_exchange_token&fb_exchange_token=[上で取得したAccess Token]

要は60日ごとに手作業で有効期限を伸ばさないといけない、っていうのが自分の認識なんですがしなくてもOKなやり方がどっかにあるんでしょうか。。