便利ですねぇ。
やりたいこととかの話
LINE公式アカウントを運用するにあたり、毎日の友だち登録数を追いたい。
何なら、1日のうち複数回チェックする事も考えている。
だから、LINE公式アカウントの管理画面上の機能じゃ足りない。
とはいえ人力で頑張るのはめんどくさいし、できない状況も想定される。
チェックしたら表形式でまとめるようになってるので、だったらGoogleスプレッドシート(GAS)で自動でやれたら良いよね、という話。
できるのでやっていく。
仕組みとか流れの理解
LINE公式アカウントはアクセストークンを使うことで、ユーザーがデータを拾ってくることができる。
GASは定期的に自動処理させる機能がある。
組み合わせたらいいよね。
- LINE Developersでチャネルアクセストークンを発行する
- スプレッドシートでGASを組み込む
- 何日・何時の各種数字を拾ってくる
- スプレッドシート上に出力する
- 指定時間にGASが発火するように設定
- 勝手にやってくれるのを待つ
やっていく
「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は連続で処理する時間の上限が決まってるから、今回みたいなちょっとした処理に向いてる。
いいですね。
アクセストークンについても、今回程度の内容なら制限を気にする必要はないっぽい。
いいですね。

コメント