Instagram Graph APIを使って「いいね数」などを集計する

# 概要
InstagramGraphAPIを使って、自分のInstagramアカウントの投稿の「いいね数」「コメント数」「フォロワー数」などを取得し、それらを集計してcsvファイルに書き出してみます。

# 最終の書き出し例
```csv
2019/10/28 13:25, フォロワー数:54, いいね累計数:545, コメント累計数:20
```

# 全体の流れ
1. GraphAPIでデータ取得<br>
    1-1. インスタのアカウントをビジネスアカウントに<br>
    1-2. Facebookアカウントを用意して1-1のアカウントと連携<br>
    1-3. アクセストークン（APIを表示するのに必要な文字列）を取得<br>
    　　1-3-1. facebook for developerでアプリを作成<br>
    　　1-3-2. 1個目のアクセストークンを取得<br>
    　　1-3-3. 2個目のアクセストークンを取得<br>
    　　1-3-4. 3個目のアクセストークンを取得<br>
    　　1-3-5. トークンの内容をチェック<br>
    1-4. ビジネスアカウントIDを取得<br>
2. 集計<br>
    2-1. jsonデータを変数に格納して、デコードする<br>
    2-2. 累計の計算（「いいね数」「コメント数」）<br>
    2-3. csvファイルに必要データの追記書き出し<br>
　（「日時」「フォロワー数」「累計いいね数」「累計コメント数」）<br>

#### 1. GraphAPIでデータ取得(1-1から1-4まで)
1-1 〜 1-4に関しては、以下の2記事を参考に行った。

- <a href="https://hyp.llc/tips/instagram-graph-api/">Instagram Graph APIを使おう！</a>（主にこちらの記事参考。）
- <a href="https://qiita.com/joh_luck/items/af6f02c43e2f4497e15e"> Instagram Graph APIとGAS（Google Apps Script）を使ってインスタグラムのフォロワー数を自動的に日々記録する</a> （1-4のパラメータ指定部分のみ参考。）<br>
  - 例）いいね数とコメント数をとる場合：「media{comments_count,like_count}」 ）

また、以下は1-3, 4に関して必要なツール一覧

- <a href="https://developers.facebook.com/">facebook for developer</a>（1-3-1, 1-3-3, 1-4で利用。）
- <a href="https://developers.facebook.com/tools/explorer/">facebook for developersのグラフAPIエクスプローラ</a>（1-3-2で利用。）
- <a href="https://developers.facebook.com/tools/debug/accesstoken/">アクセストークンデバッガー</a>（1-3-5で利用。）

以下は、APIのリファレンス。

- <a href="https://developers.facebook.com/docs/instagram-api/reference">Refecence / Instagram Graph API</a>（1-4のパラメータ指定の仕方が記載。）


#### 2-1. jsonデータを変数に格納して、デコードする

```php
//jsonデータ取得し、変数に格納
$url = "https://graph.facebook.com/v4.0/「ビジネスアカウントID」?fields=「取得したいもののパラメータ指定」&access_token=「3個目のアクセストークン」";
$json = file_get_contents($url);

// $jsonを連想配列にデコード
$array = json_decode( $json , true ) ;
```
- ビジネスアカウントID：1-4で取得したもの
- 取得したいもののパラメータ指定：<br>
    - パラメータ：「followers_count%2Cbusiness_discovery.username(「アカウント名」){media{comments_count,like_count,timestamp}}」
        - followers_count：フォロワー数
        - media{comments_count}：コメント数
        - media{like_count}：いいね数
        - media{timestamp}：投稿日時
- 3個目のアクセストークン：1-3-4で取得したもの

#### 2-2. 累計の計算
```php
// 投稿数取得
$num = count($array["business_discovery"]["media"]["data"]);

// 累計計算
for($i=0; $i<$num; $i++){
  // いいね累計
  $like_sum = $like_sum + $array["business_discovery"]["media"]["data"][$i]["like_count"];
  // コメント累計
  $comments_sum = $comments_sum + $array["business_discovery"]["media"]["data"][$i]["comments_count"];
};
```
#### 2-3. csvファイルに必要データの追記書き出し
「日時」「フォロワー数」と、[2-2]で取得済みの「いいね累計数」「コメント累計数」を、csvファイルに追記で書き出す。

```php
// フォロワー数取得
$follower = $array["followers_count"];

// 必要データを配列に格納
$contents = date("Y/m/d H:i").', フォロワー数:'.$follower.', いいね累計数:'.$like_sum.', コメント累計数:'.$comments_sum;
// ファイルを開く。"a"は書き出し用として開くパラメータ。
$file = fopen("data.csv", "a");
// データを1行書き込む
fputs($file, $contents."\n");
```

# 全体コード（データ取得から集計、書き出しまで）
```php
/* 2-1. jsonデータを変数に格納して、デコードする */
$url = "[取得したいjsonのURL]";
$json = file_get_contents($url);
$array = json_decode( $json , true ) ;

/* 2-2. 累計の計算 */
$num = count($array["business_discovery"]["media"]["data"]);
for($i=0; $i<$num; $i++){
  $like_sum = $like_sum + $array["business_discovery"]["media"]["data"][$i]["like_count"];
  $comments_sum = $comments_sum + $array["business_discovery"]["media"]["data"][$i]["comments_count"];
};

/* 2-3. csvファイルに必要データの追記書き出し */
$follower = $array["followers_count"];
$contents = date("Y/m/d H:i").', フォロワー数:'.$follower.', いいね累計数:'.$like_sum.', コメント累計数:'.$comments_sum;
$file = fopen("data.csv", "a");
fputs($file, $contents."\n");
```
# 参考
- データの取得の流れ
  - <a href="https://hyp.llc/tips/instagram-graph-api/">Instagram Graph APIを使おう！</a>
  - <a href="https://qiita.com/joh_luck/items/af6f02c43e2f4497e15e">Instagram Graph APIとGAS（Google Apps Script）を使ってインスタグラムのフォロワー数を自動的に日々記録する</a>
- 集計コード
  - <a href="https://qiita.com/fantm21/items/603cbabf2e78cb08133e">PHPでJSONデータの取得の仕方</a>
      - jsonデータを変数に格納するとこまで参考。
  - <a href="https://syncer.jp/how-to-use-json">PHPでJSONのデータを処理する方法</a>
      - デコードして、連想配列の中の取り出し方参考。
  - <a href="https://hacknote.jp/archives/42243/">PHPでJSONファイルのデータを取得し、配列に格納する</a>
- その他
  - <a href="https://kotobank.jp/word/%E3%83%87%E3%82%B3%E3%83%BC%E3%83%89-6270">デコード / コトバンク</a>
      - デコード：符号化されたデータ（ここではjsonデータ）を元の状態に復元すること。