前提条件
下記を取得済みであること
- ビジネスアカウントID
- アクセストークン
configにビジネスアカウントIDとアクセストークンを設定
- .env
INSTAGRAM_BUSINESS_ID={ビジネスアカウントID}
INSTAGRAM_ACCESS_TOKEN={アクセストークン}
- config/services.php
// 配列の最後に追加
'instagram' => [
'business_id' => env('INSTAGRAM_BUSINESS_ID'),
'access_token' => env('INSTAGRAM_ACCESS_TOKEN'),
],
これで config('services.instagram.business_id')
/ config('services.instagram.access_token')
といった感じで値を取得できるようになった
Controllerで取得
- InstagramController
public function index()
{
// インスタ投稿格納用
$instagramItems = [];
// インスタAPIを使用するためのIDとトークンを設定
$instagramBusinessId = config('services.instagram.business_id');
$instagramAccessToken = config('services.instagram.access_token');
// 取得条件や項目などを指定
$userName = '取得したいインスタユーザー名を入れる';
$query = "business_discovery.username({$userName}){id,followers_count,media_count,media{id,caption,media_url,timestamp,permalink}}";
try {
// インスタ投稿を取得する
$target_url = "https://graph.facebook.com/v12.0/{$instagramBusinessId}?fields={$query}&access_token={$instagramAccessToken}";
$json = file_get_contents($target_url);
$json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN');
$result = json_decode($json, true);
foreach ($result['business_discovery']['media']['data'] as $item) {
$instagramItems[] = !empty($item['thumbnail_url']) ? [
'img' => $item['thumbnail_url'],
'caption' => $item['caption'],
'link' => $item['permalink'],
] : [
'img' => $item['media_url'],
'caption' => $item['caption'],
'link' => $item['permalink'],
];
}
} catch (\Exception $exception) {
// ビジネスアカウント・クリエイターアカウントでない場合は取得できない
Log::error($exception->getMessage());
}
return view('instagram.index', compact('instagramItems'));
}
viewで表示
- instagram/index.blade.php
<div class="instagram-list">
@foreach ($instagramItems as $instagramItem)
<a href="{{ $instagramItem['link'] }}" target="_blank" class="instagram-list__item">
<img src="{{ $instagramItem['img'] }}" alt="{{ $instagramItem['caption'] }}" />
</a>
@endforeach
</div>
Laravelでユーザー名を指定してインスタグラムの投稿を表示した時のメモ
素のPHPでも使用できる
(config関連は飛ばしてInstagramControllerのソースを使用すればOK)