テレットブログ

Instagram Graph APIを使ってインスタグラムの画像をPHPで取得するまで

2019年04月22日
image
この記事は2019年10月時点での情報です。

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アプリ」を選択

「トークンを取得」を選択

「ユーザーアクセストークンを取得」を選択




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】となります。



 

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/



新着記事

image

CodeIgniter3でリダイレクトでセッション消える

2020年10月28日
テストサーバ(http)にて確認していると 管理画面ではセッションが空に!
Read more →
image

防衛省、サイバーセキュリティ担当の防衛技官を募集中月給30万円

2020年10月16日
 防衛省が、サイバーセキュリティに従事する防衛技官を募っている。自衛隊のシステム
Read more →
image

Amazon Echo Auto アマゾンエコーオート 開封&利用一週間レビュー

2020年10月08日
早速アマゾン・エコーオートを購入して車に取り付けて利用してみました! 報道
Read more →
image

【Amazon】アマゾン 年に1度のプライムデー開催情報

2020年10月06日
Amazon プライムデーが開催されます Amazonプライムデー
Read more →
image

Amazonの車載デバイス「Echo Auto」が発売!

2020年10月01日
「OK Google」「Hi Siri」「Hi Mercedes」といった音声に
Read more →
Choose Colour