2020年4月22日に出力用PHPプログラムを記載しました。
最新版では内容や表示が変更されている場合があります。
自分のホームページにinstagramの画像を表示したい!
以前は表示されていたのに、いつしか表示されなくなっていた。
instagramの画像をhホームページに掲載したことがあるひと、これから掲載したい方向けの情報です。
表示させるまでのステップです。
FacebookページとInstagramビジネスアカウントを連携させる
Facebookページを用意し、Facebookページの管理画面からInstagramビジネスアカウントを連携します。

新しいアプリIDを作成
Facebook for Developershttps://developers.facebook.com/でアプリを作成します。 アプリ名とメールアドレスのみ入力してください。

トークンの発行
グラフAPIエクスプローラーhttps://developers.facebook.com/tools/explorer/でトークンを発行します。
「Facebookアプリ」を選択
「トークンを取得」を選択
「ユーザーアクセストークンを取得」を選択
.png)
page_show_list
publish_pages
manage_pages
instagram_basic
を選択

Facebookのアクセス権許可が出てきますので、「Get Access token」を押しす。
【トークン】が発行されると「アクセストークン」欄に長い文字列が表示されます。
このトークンは有効期限があるので、有効期限を延長し有効期限なしのトークンを取得します。
トークン期限の延長
右上のマイアプリ→アプリ名→設定→ベーシックから【アプリID】【app secret】を調べます。
さっき取得した【トークン】を使って次のURLにアクセスします。
- URL
 - https://graph.facebook.com/v3.0/oauth/access_token?grant_type=fb_exchange_token&client_id=【アプリID】&client_secret=【app_secret】&fb_exchange_token=【トークン】
 
ブラウザ画面に次のような表示が出ると思います。
- 第2トークン
 - {“access_token”:”長い文字列”,”token_type”:”bearer”}
 
この表示されているaccess_tokenをコピーしておきます。
 
有効期限なしのアクセストークン取得
先ほどの【第2トークン】を使い、次のURLにアクセスします。
- URL
 - https://graph.facebook.com/v3.0/me?access_token=【第2トークン】
 
アクセスをするとブラウザー画面にnameとidが表示されます。
 
{
   "name": "【名前の文字列】",
   "id": "【id】"
}
画面に表示されているidをコピーしておきます。
【id】【第2トークン】を使い、次のURLにアクセスします。
- URL
 - https://graph.facebook.com/v3.0/【id】/accounts?access_token=【第2トークン】
 
ブラウザ画面にJSON形式表示されます。
Facebookページの情報が記載されたJSON形式で表示されます。今回利用するFacebookページのその中の「access_token」を保存します。
こちらの第3トークンが最終的に使用するトークンになります。
アクセストークンデバッガー
【第3トークン】の有効期限を確認
https://developers.facebook.com/tools/debug/accesstoken/

 
「有効期限」が「受け取らない」になっていれば大丈夫です。
Instagram投稿を取得する
【IGビジネスID】が必要になりますので、グラフAPIエクスプローラー https://developers.facebook.com/tools/explorer/で調べます。
アクセストークン欄に【第3トークン】を入力し、アドレスバーのような箇所に次の内容を入力します。
- GETの部分に入れてください。
 - me?fields=accounts{instagram_business_account}
 
送信ボタンを押すと、JSON形式で結果が表示されます。
その中の「instagram_business_account」の「id」が、【IGビジネスID】となります。
.jpg)
 
- IGビジネスID
 - “instagram_business_account”: { “id”: “XXXXXXXXXXXXXXXXX” },
 
Instagram投稿を表示する
- 使用するURL(自分のを取得する場合)
 - https://graph.facebook.com/v4.0/【IGビジネスID】?fields=name%2Cmedia.limit(【表示したい件数】)%7Bcaption%2Clike_count%2Cmedia_url%2Cpermalink%2Ctimestamp%2Cusername%7D&access_token=【第3トークン】
 
PHPでInstagram投稿を取得する
PHPにて取得してjson形式でファイル出力保存させる。
表示の度にプログラムが起動させていると、facebook アプリ側から
「アクセス多いので課金するね!」
とか言われたら嫌なので、
Cronで定期的8時間毎に設定して自分のサーバにログ保存させる。
取得用PHPプログラム
<?php
$fileDir = __DIR__;
$instagram_business_id = '【ビジネスアカウントID】'; 
$access_token ='【アクセストークン】';
$target_user = '【ターゲット先】';
//自分が所有するアカウント以外のInstagramビジネスアカウントが投稿している写真も取得したい場合は以下
$query = 'business_discovery.username('.$target_user.'){id,followers_count,media_count,ig_id,media{caption,media_url,media_type,like_count,comments_count,timestamp,id}}';
//自分のアカウントの画像が取得できればOKな場合は$queryを以下のようにしてください。
//$query = 'name,media{caption,like_count,media_url,permalink,timestamp,username}&access_token='.$access_token;
$instagram_api_url = 'https://graph.facebook.com/v4.0/';
$target_url = $instagram_api_url.$instagram_business_id."?fields=".$query."&access_token=".$access_token;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $target_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$instagram_data = curl_exec($ch);
curl_close($ch);
#echo $instagram_data;
$rss = json_decode($instagram_data,true);
if(key($rss)=="error"){
    exit;
}else{
    $f = fopen("".$fileDir."/index.json", "wb");
    fwrite($f, $instagram_data);
    fclose($f);
    //ファイルの属性を変更
    chmod ("".$fileDir."index.json", 0666);
    exit;
}
 保存された index.json を読み込むためのPHP
jquery利用者は 「jquery json 読み込み」でググってください。
データ表示用PHP(参考)
自分用のプログラムに変更して下さい
<?php
// インスタデータ(index.json)ファイル情報を取得 
   $jsonUrl = "instagram/index.json";
        
        
   $json = file_get_contents($jsonUrl);
   $json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN');
   $ary = json_decode($json,TRUE );
          
          $i =1; 
          foreach ($ary['business_discovery']['media']['data'] as $key => $value){
              
                 $instaputout .= '<div>';
                 $instaputout .= '<a href="<インスタページのURL>"><img src="'.$value["media_url"].'"></a>';
                 $instaputout .= '</div>';
              if($i==12){
                   break;
              } 
           $i++
          }
?>
<?php echo $instaputout; // 出力用?>
 参考URL
https://arrown-blog.com/instagram-graph-api/
https://goo-up.com/796/