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