[GAS+LINE]自動で定期的にLINE公式アカウントの友だち数をスプレッドシートに追記させる方法

便利ですねぇ。

やりたいこととかの話

LINE公式アカウントを運用するにあたり、毎日の友だち登録数を追いたい。
何なら、1日のうち複数回チェックする事も考えている。

だから、LINE公式アカウントの管理画面上の機能じゃ足りない。
とはいえ人力で頑張るのはめんどくさいし、できない状況も想定される。

チェックしたら表形式でまとめるようになってるので、だったらGoogleスプレッドシート(GAS)で自動でやれたら良いよね、という話。

できるのでやっていく。

仕組みとか流れの理解

LINE公式アカウントはアクセストークンを使うことで、ユーザーがデータを拾ってくることができる。
GASは定期的に自動処理させる機能がある。
組み合わせたらいいよね。

  1. LINE Developersでチャネルアクセストークンを発行する
  2. スプレッドシートでGASを組み込む
    1. 何日・何時の各種数字を拾ってくる
    2. スプレッドシート上に出力する
  3. 指定時間にGASが発火するように設定
  4. 勝手にやってくれるのを待つ

やっていく

「1日に2回(9時・16時)、登録状況をチェックしてスプレッドシートに吐き出す」をやっていくとする。

LINE Developersでチャネルアクセストークンを発行する

詳細は省きます。

Messaging APIのチャネルを作る。
Massaging API設定→「チャネルアクセストークン」で「チャネルアクセストークン(長期)」を発行する。

Lステップとかを接続するためにはWebHookを使うので、既にMessaging APIがある場合もある。
同じチャネルを使いまわしても問題ない。
問題がある場合もあるらしいけど、今回は大丈夫。

スプレッドシートの用意

1列目を項目用にするので、Aから「日付 / 時間 / 累計友だち数 / ターゲットリーチ(有効数) / ブロック数」と入れておく。

上部メニュー「拡張機能」→「Apps Script」をクリック。

GASをやる

エディタに以下の内容をコピペ。

6行目を最初に取得したトークンに書き換える。

/**
 * LINE公式アカウントから友だち数を取得し、スプレッドシートに追記する関数
 */
function fetchLineFriendCount() {
  // 💡【必須】LINEのチャネルアクセストークンを入力
  var accessToken = 'トークンをコピペ';
  
  // 直近の確定データを取得するため、昨日(1日前)の日付を「YYYYMMDD」形式で取得
  var yesterday = new Date();
  yesterday.setDate(yesterday.getDate() - 1);
  var targetDate = Utilities.formatDate(yesterday, "JST", "yyyyMMdd");
  
  // ログ記録用に、今日(チェックした瞬間)の日付と時間を取得
  var now = new Date();
  var currentDate = Utilities.formatDate(now, "JST", "yyyy-MM-dd");
  var currentTime = Utilities.formatDate(now, "JST", "HH:mm");

  // LINE Insight API のエンドポイント
  var url = 'https://api.line.me/v2/bot/insight/followers?date=' + targetDate;
  
  var options = {
    'method': 'get',
    'headers': {
      'Authorization': 'Bearer ' + accessToken
    },
    'muteHttpExceptions': true
  };

  try {
    // LINE APIへリクエスト送信
    var response = UrlFetchApp.fetch(url, options);
    var json = JSON.parse(response.getContentText());

    // APIのステータスが「ready(準備完了)」の場合のみシートに書き込み
    if (json.status === 'ready') {
      var followers = json.followers || 0;       // 累計追加数
      var reaches   = json.targetedReaches || 0; // 有効友だち数
      var blocks    = json.blocks || 0;          // 累計ブロック数

      // スプレッドシートの末尾に「日付、時間、累計、有効数、ブロック数」を追記
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
      sheet.appendRow([currentDate, currentTime, followers, reaches, blocks]);
      
      console.log('データの追記に成功しました: ' + currentDate + ' ' + currentTime);
    } else {
      console.warn('LINE APIのデータがまだ準備できていません。ステータス: ' + json.status);
    }
    
  } catch (error) {
    console.error('エラーが発生しました: ' + error.toString());
  }
}

「デバッグ」を押す。
初回では認証のポップアップが出るのでチェックしておくのと、その名の通りデバッグをやる。
なんの支障もなかった。

「デバッグ」または「実行」を押すとコードが走って、紐づいたスプレッドシートに追記される。

指定時間に発火させる(トリガー)設定

GASの左側のアラームアイコンが「トリガー」設定メニューなのでクリック。

「トリガーを追加」を押して、各項目を埋める。

実行する関数を選択fetchLineFriendCount
デプロイ時に実行Head
イベントのソースを選択時間主導型
時間ベースのトリガーのタイプを選択日付ベースのタイマー
時刻を選択午前9時~10時

1日に2回チェックしたいからもう一度「トリガーを追加」を押してやっていく。
基本的に全部同じで、最後の「時刻を選択」を「午後4時~5時」にする。

ログのチェックとか

スプレッドシートに書き込まれてたらそれがすべてたけど、GAS左メニュー内「実行数」で何がどうなったかのログが貯まるようになってるので、そこからも見れる。処理の内訳がわかるので具体的なものが知りたければ、って感じ。

まとめ

面倒から解放されるのは気持ちがいいですね。

運用中の注意は、スプレッドシートを壊さないようにすること。

「何日何時のタイミングで取得した情報」は、失うと取り返しが効かない。

GASは連続で処理する時間の上限が決まってるから、今回みたいなちょっとした処理に向いてる。
いいですね。

アクセストークンについても、今回程度の内容なら制限を気にする必要はないっぽい。
いいですね。

コメント

タイトルとURLをコピーしました