PHP
Instagram

Instagram APIをPHPでさくっと使う

More than 1 year has passed since last update.

最初に

InstagramではAPIを利用する際にアクセストークンが必要になります。
今回の記事はPHPでAPIを使用するケースなので、
そこを知りたい場合は「instagram アクセストークン 取得」で検索してください。

本題

APIを利用しようとした時、Packagistに公開されているライブラリをいくつか使ってみましたが、利用したいAPIの使用方法が記載されてなかったり、指定ができないscopeがあったりと、微妙に使いにくいものばかりでした。(良いのがあったらごめんなさい)
OAuth認証するのであれば便利なのですが、サーバからAPIを利用するだけなので、これなら自分で実装した方が楽だなと感じて自作しました。
使いたいAPIは、公式ドキュメントを参照して下さい。

サンプルコード

class Instagram
{

    private $access_token = 'xxx'; // dummy

    /**
     * リクエスト
     *   例1:$instagram->request('users/self');
     *   例2:$instagram->request('users/self/media/recent', ['count' => 50]);
     */
    public function request($url, $parameters=[])
    {
        $parameters = $parameters + ['access_token' => $this->access_token];
        $request_url = http_build_url($url, [
            "scheme" => "https",
            "host"   => "api.instagram.com",
            "path"   => "/v1/{$url}/",
            "query"  => http_build_query($parameters),
        ]);
        if ($request_url === false)
        {
            return false;
        }

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $request_url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $result = curl_exec($ch);
        curl_close($ch);
        if (!$response = json_decode($result))
        {
            return false;
        }
        return $response;
    }
}

$instagram = new Instagram();
$user_info = $instagram->request('users/self');
$my_media  = $instagram->request('users/self/media/recent', ['count' => 50]);

まだ試していない関数も多いですが、たぶんこれで大半はカバーできるかなと思います。
もし、http_build_queryが使えない環境であれば、下記ライブラリを利用してみてください。
https://packagist.org/packages/jakeasmith/http_build_url