データ分析

超簡単!【インスタグラム】Instagram graph API を用いてアカウントのインサイト情報を取得する

Instagramのインサイト等の情報は過去を遡ろうとすると最長でも1か月半しか確認できなません。分析をする上で去年の同じ月に比べてどうだったかなど、確認することも出てくるかと思います。

Instagram Graph API」を利用して、各情報を取得すれば、アウトプットの仕方は自由なので、とても便利に分析することができるます。

今回はユーザーのフォロー数、フォロワー数、といった基本的な情報をはじめ、リーチ(メディアを閲覧したユニークユーザーの合計数)やインプレッション(メディアが閲覧された合計回数)といった少し踏み込んだ情報までをAPI経由で取得してみたいと思います。

取得できる項目

取得できるインサイトの項目一覧です。

※対象アカウントのフォロワー数が100人未満の場合、取得ができません。

follow_count フォロー数
follower_count フォロワー純増数
profile_views プロフィールビュー数
impressions インプレッション数
audience_city フォロワーの市町村データ
audience_country フォロワーの国データ
audience_gender_age フォロワーの性別と年齢の分布
email_contacts プロフィール上のメールリンク合計タップ数
get_directions_clicks プロフィール上の指示リンクの合計タップ数
online_followers フォロワーのうち、指定された期間にオンラインだったフォロワーの合計数
phone_call_clicks プロフィール上のコールリンクの合計タップ数
text_message_clicks プロフィール上のSMSリンクの合計タップ数
website_clicks プロフィール上のウェブサイトリンクの合計タップ数

準備

以下の記事を参考にInstagram graph APIを利用できる状況を構築。

https://to-inc.co.jp/socialbook/2021/11/08/2189/

使用する言語

今回は、PHPを基にInstagram graph APIを介してデータ取得します。

実装

エンドポイント例

https://graph.facebook.com/v11.0/※1123456/insights?metric=※2follower_count,profile_views,impressions,reach,website_clicks&period=day&※3since=2021/12/01&util=2021/12/15&access_token=※4abcdehghijk

解説

※1

対象のアカウントのInstagramIDに変更

※2

取得したい項目(カラム名)に変更

※3

参照期間を変更

since:開始日時(yyyy/mm/dd形式)

util:終了日時(yyyy/mm/dd形式)

戻り値の説明

以下のようなJSON形式の配列が戻ってきます。

利用用途に併せて整形してみてください。

  ["data"]=>
  array(5) {
    [0]=>
    array(6) {
      ["name"]=>
      string(14) "follower_count"  //カラム名
      ["period"]=>
      string(3) "day"  //日別
      ["values"]=>
      array(6) {
        [0]=>
        array(2) {
          ["value"]=>
          int(2)  //数値
          ["end_time"]=>
          string(24) "2021-12-25T08:00:00+0000"  //日時
        }
        =>
        array(2) {
          ["value"]=>
          int(3)
          ["end_time"]=>
          string(24) "2021-12-26T08:00:00+0000"
        }

      }
      ["title"]=>
      string(18) "フォロワー数"
      ["description"]=>
      string(90) "このプロフィールをフォロー中のユニークアカウントの合計数です"
      ["id"]=>
      string(45) "17841402296692726/insights/follower_count/day"
    }

プログラミング例

以下、実際のプログラムコードです。

//①アカウント情報
$instagram_business_id = "×××××××××";
$access_token = "〇〇〇〇〇〇〇〇〇";
$target_user = $insta_name;

//②対象期間指定
$now_date = date("Y/m/1");
$before_date = date("Y-m-d",strtotime("-7 day"));

$start_time = strtotime($now_date);
$wnd_time = strtotime($before_date);

//③取得したい項目を指定
$query = 'insights?metric=follower_count,profile_views,impressions,reach,website_clicks&period=day&since='.$start_date.'&until='.$end_date;

//④エンドポイントURL生成
$instagram_api_url = 'https://graph.facebook.com/v11.0/';
$target_url = $instagram_api_url.$instagram_business_id."/".$query."&access_token=".$access_token;

//⑤JSON形式から変換
$get_data_ar = json_decode(@file_get_contents($target_url), true);

//⑥連想配列に整形
$engagement_data = array();
foreach($get_data_ar['data'] as $key => $val){
  foreach($val['values'] as $data_key => $data_val){
    $target_date = date('Ymd', strtotime($data_val['end_time']));
    if($val['name'] == 'impressions'){
     $engagement_data['impressions'][$target_date] = $data_val['value'];
    }else if($val['name'] == 'profile_views'){
     $engagement_data['profile_views'][$target_date] = $data_val['value'];
    }else if($val['name'] == 'reach'){
     $engagement_data['reach'][$target_date] = $data_val['value'];
    }else if($val['name'] == 'follower_count'){
     $engagement_data['follower_count'][$target_date] = $data_val['value'];
    }else if($val['name'] == 'website_clicks'){
     $engagement_data['website_clicks'][$target_date] = $data_val['value'];
    }
  }
}

解説

対象のアカウントの情報に変更

取得したい期間を定義

今回は本日日付より7日前を設定しています。

エンドポイントのURLを定義する為に

取得したい項目をカンマ区切りで定義していきます。

実際に通信先のエンドポイントを作成します。

JSON形式のデータが返却される為、

デコードします。

任意の連想配列の形に整形しています。

今回は$engagement_data[カラム名][日時] = 数値

としています。

今回はアカウントのインサイトが取得できたので、
次回は投稿のインサイトを取得してみたいと思います。