Parallax Image

Cutls Code Archives


SNZ 2016

【Croudia】Access Token等の取得

カテゴリ:Croudia 投稿日:2016年1月23日

CroudiaのAPIはTwitterとそっくりですが、少し違います。TwitterはAccess TokenとAccess Token Secretで認証しますが、CroudiaはAccess TokenとRefresh Tokenで認証します。また、Access Tokenの有効期限は60分、Refresh Tokenは半年です。つまり、botが作りにくいというわけです。Access Tokenが切れたらRefresh Tokenで再取得します。でも6ヶ月経ったらRefresh Tokenも使えなくなる。

とりあえずAccess Token/Refresh TokenをPHPを取得しましょう。PHPの開始終了は省略します。
コンシューマーキーとシークレットはCroudia Developer Centerからアプリ登録をして取得できます。これはAuthorize URL(https://api.croudia.com/oauth/authorizeから始まるURL、アプリを認証するかを選択する画面)からリダイレクトされた時を想定しています。リダイレクトURLはアプリ登録時に設定してください。おそらく{リダイレクトURL}?code=…となっているはずです。このサンプルではAccess TokenやRefresh TokenをSESSIONに入れています。
エラー処理はしていません。

session_start();
$code=$_GET['code'];
$data = array(
    "grant_type" => "authorization_code",
    "client_id"  ="コンシューマーキーを入力",
    "client_secret" => "コンシューマーシークレットを入力",
    "code" => $code,
);
 
$url = "https://api.croudia.com/oauth/token";
 
// POST用関数
function http_post ($url, $data)
{
  $data_url = http_build_query ($data);
  $data_len = strlen ($data_url);
 
  return array (
        'content'=>  file_get_contents (
            $url,
            false,
            stream_context_create (
              array ('http' =>
                  array (
                      'method'=>'POST',
                      'header'=>"Content-Type: application/x-www-form-urlencoded\r\nHost: api.croudia.com\r\n",
                      'content'=>$data_url)
                  )
              )
            ),
      'headers'=> $http_response_header
  );
}
 
// 送信
$results = http_post($url, $data);
$result=$results[content];
$result=json_decode($result);
$at=$result->access_token;
$rt=$result->refresh_token;
//変数$at/$rtに入りました
$_SESSION['at']=$at;
$_SESSION['rt']=$rt;
//SESSIONに入りました
//Access Tokenは60分しかもたないので有効期限が60分のCookieを入れておく場合はコメントアウトを戻す
//$flag = setcookie("login", true, time() + 3600);
//Cookieを取り出す時は$_COOKIE["login"]

長いですね。Twitterの時はライブラリで簡単認証だったのに…これもそのうちライブラリが出るんですかね。