このサイトの画像投稿の実装に Instagram API を使うように変更したので簡単にまとめておきます。

  • oauth ベースの認証があり、access_token をパラメータに API をコールするスタイルの API 設計になっている
  • API にscope (API でアクセスできるデータの範囲)という概念があり、これを拡張するためには Instagram へ申し立てをする必要がある(このサイトでは basic だけで実装してるので申し立てしてません)
  • oauth で redirect されたときのパラメータが現時点(2016/1/25)で undocument, 以下のように実装すると通りました。
use GuzzleHttp\Client as Guzzle;
// ...
if ($request->has('code')) {
$params = $request->all();
$g = new Guzzle;
$postParams = [
'form_params' => [
'client_id' => config('services.instagram.client_id'),
'client_secret' => config('services.instagram.client_secret'),
'grant_type' => 'authorization_code',
'redirect_uri' => config('services.instagram.redirect'),
'code' => $params['code'],
]
];
$response = $g->post('https://api.instagram.com/oauth/access_token', $postParams);
$body = json_decode($response->getBody());
$token = $body->access_token;
// 以降 $token をつかって API コールする
}
  • token に期限や refresh の概念は実装されていない模様
  • 本番環境で利用開始するに当たって、Instagram が想定しているユースケースに該当する場合に限り Sandbox から本番への移行申請を行う必要あり
    • このサイトのように、自分自身の写真を提供するだけの場合などは Sandbox のまま運用してよい。こちらを参照