インスタグラムAPIを使ってPHPで画像を表示させる方法

これまで使えていたインスタグラムAPIでユーザIDを取得する方法が使えなくなり焦りましたが、どうにか画像表示にこぎつけることができたのでメモしておきます。

解決策

いきなりですが結論としては、このページに行ってアカウント名を入力するとインスタグラムのユーザIDが取得できるので、ユーザIDを取得し、

$url = 'https://api.instagram.com/v1/users/【ユーザID】/media/recent?access_token=【アクセストークン】&count=5';
$data = json_decode(@file_get_contents($url));

foreach ($data->data as $v) {
	echo '<img loading="lazy" src="' . $v->images->standard_resolution->url . '"">';
}

これでインスタグラムの最新投稿5件が取得されて画面に表示されたと思います。

一応、アクセストークンの取得方法も書いておきます。

https://instagram.com/oauth/authorize/?client_id=【CLIENT ID】&redirect_uri=【REDIRECT URL】&response_type=token

↑このURLのクライアントIDとリダイレクトURLを自分の情報に変更してブラウザアクセスするとURL部分に「#access_token=XXXXXXXXXXXXXXXXXXXXXX」のようなカタチでくっついてきて取得できます。

発生したエラー

エラーで検索される方がいると思うのでコピペしておきます。

{“code”: 403, “error_type”: “OAuthForbiddenException”, “error_message”: “Implicit authentication is disabled”}

※これは以前からだったみたいです(苦笑)。「EDIT→Security→Disable implicit OAuth」のチェックを外したらエラー回避できました。

{“code”: 403, “error_type”: “OAuthForbiddenException”, “error_message”: “You are not a sandbox user of this client”}

{“meta”:{“error_type”:”OAuthPermissionsException”,”code”:400,”error_message”:”This request requires scope=public_content, but this access token is not authorized with this scope. The user must re-authorize your application with scope=public_content to be granted this permissions.”}}

発端・原因

当初は某所でみたユーザID取得用のコードを試してみたところ上のようなエラーが出たのが発端でした。

つい先日まで同じコードでやれていたのになぜ?と思って色々と調べてみると、どうやらこの現象はインスタグラムAPIの仕様変更?によるものだったようです。

https://instagram.com/developer/endpoints/

↑このページの上部青色枠に囲まれた部分に「〜after Nov 17, 2015 will start in Sandbox Mode〜」とあり、2015年11月17日、つまり昨日からSandbox Mode云々と書いてあります。

Instagram Developerの「Manage Clients」からEDITを押して11/17前に作成した情報と以降に作成したものを見比べてみると、

左が11/17前に作成したもので、右が11/18に作成したものですが、「Client Mode Sandbox Mode」というのが追加されていました。

このSandbox Modeについて調べてみたのですが、イマイチ判然としないんですよね・・・英語がまともに読めないとこういうとき辛いですね。


ともかく上記で解決できたので、同じ症状でお悩みの方はぜひお試しになってみてください^^