GASを使ってTwitterアカウントのフォロー・フォロワー数を日次で取得してスプレッドシートに記録してみる

5 min読了の目安(約4600字TECH技術記事

Twitter APIの利用申請

検索すれば結構出てくるので割愛。

参考:https://www.itti.jp/web-direction/how-to-apply-for-twitter-api/

Twitter認証周りのGASファイル作成

GASからTwitterを使うときに認証する必要があって、そのコードがライブラリ化(TwitterWebService)されてます。ただ、OAuthのバージョンが古く認証ができないので、自分でコピーを作成して最新のバージョンにする必要があります。

https://gist.github.com/M-Igashi/750ab08718687d11bff6322b8d6f5d90

GASファイルを作成してGistのコードをコピペし、GASのページのリソース->ライブラリを選択してOAuth1を最新のバージョンにします。

最新のバージョンにしたら、そのGASファイルのIDをメモっておきます。https://script.google.com/d/xxx/editxxxの部分がIDです。

メインのFFのカウント取得・スプレッドシートに記録するGASファイル作成

(これペロッとコピペして実行すると動くと思います)

// Compiled using ts2gas 3.6.3 (TypeScript 3.9.7)
"use strict";
var today = new Date();
var todayDate = today.getFullYear() + "/" + (today.getMonth() + 1) + "/" + today.getDate();
var accounts = PropertiesService.getScriptProperties().getProperty("ACCOUNTS").split(",");
var twitter = TwitterWebService.getInstance(PropertiesService.getScriptProperties().getProperty("CONSUMER_KEY"), PropertiesService.getScriptProperties().getProperty("CONSUMER_SECRET"));

// Twitter認証
function authorize() {
    twitter.authorize();
}

// Twitter認証解除
function reset() {
    twitter.reset();
}

// Twitter認証後のコールバック
function authCallback(request) {
    return twitter.authCallback(request);
}

function printError(error) {
    return ("[\u540D\u524D] " + error.name + "\n" +
        ("[\u5834\u6240] " + error.fileName + "(" + error.lineNumber + "\u884C\u76EE)\n") +
        ("[\u30E1\u30C3\u30BB\u30FC\u30B8]" + error.message + "\n") +
        ("[StackTrace]\n" + error.stack));
}

function getFFCount(account) {
    var service = twitter.getService();
    var response = JSON.parse(service.fetch("https://api.twitter.com/1.1/users/show.json?screen_name=" + account));
    return {
        follower: response.followers_count,
        follow: response.friends_count,
    };
}

function recordToSheet(account, fFCount) {
    var spreadsheet = SpreadsheetApp.openById(PropertiesService.getScriptProperties().getProperty("SPREDSHEET_ID"));
    var sheet = spreadsheet.getSheetByName(account);
    if (!sheet) {
      sheet.insertSheet(account);
    }

    var lastRowA = sheet
        .getRange(1, 1)
        .getNextDataCell(SpreadsheetApp.Direction.DOWN)
        .getRow();
    var targetRow = lastRowA + 1;
    sheet.getRange(targetRow, 1).setValue(todayDate);
    sheet.getRange(targetRow, 2).setValue(fFCount.follow);
    sheet.getRange(targetRow, 3).setValue(fFCount.follower);
    sheet.getRange(targetRow, 4).setValue("=C" + targetRow + "/B" + targetRow);
}

function main() {
    try {
        for (var i = 0; i < accounts.length; i += 1) {
            // 指定したアカウントのFF数を取得
            var fFCount = getFFCount(accounts[i]);
            recordToSheet(accounts[i], fFCount);
        }
    }
    catch (e) {
        // eslint-disable-next-line no-console
        console.error(printError(e));
    }
}

ファイルを作成したら環境変数(GASの編集ページのファイル->プロジェクトのプロパティ->スクリプトのプロパティ)に

  • 取得したいアカウント名(複数アカウントを取得したい場合,でつなげる。a_user,b_user
  • Twitter APIConsumer API keyConsumer API secret key
  • 記録したいスプレッドシートのID(スプレッドシートの編集ページのURLのxxxの部分https://docs.google.com/spreadsheets/d/xxx/edit#gid=0)

を設定します。

ファイルの内容を簡単に説明すると、

PropertiesService.getScriptProperties().getProperty("xxx")で環境変数のキーxxxの値を取得。Twitterのアカウント情報を取得するAPIエンドポイントが(https://api.twitter.com/1.1/users/show.json?screen_name=<account name>)。APIキーを使用してTwitter認証をし、for文中でアカウント名を使って情報を取得して、スプレッドシートIDを使ってアカウントごとのシート上の末尾の列に日付、フォロー数、フォロワー数、FF比を記録するということをしています。

実行してFF数をスプレッドシートに記録する

実行する前に、Twitter APIの設定ページのCallback URLに実行するGASファイルのIDを使って、https://script.google.com/macros/d/xxx/usercallbackxxxの部分にGASのIDを入れる)のように設定してください。

まずはTwitterのAPI認証をしておきます。

GASのファイルのauthorize関数を実行(実行->関数を実行->authorize)します。実行後にログを確認(表示->ログ)するとこんな文言があれば実行成功です。

※ このときにGoogleの許可をしてくださいという画面がでたら許可してください。

[20-10-25 06:44:39:124 PDT] Open the following URL and re-run the script: https://api.twitter.com/oauth/authorize?oauth_token=xxxx

ログに表示されているURLへアクセスをしてAPIの使用を許可してください。そしてSuccessという文字が表示されたら認証成功です。

次にFF数を取得してスプレッドシートに記録します。実際にはアカウント名(@抜き)がシートの名前になって、こういう並びで記録されていくので項目名の欄を作っておくと見やすいかもです。

そして実行するとアカウント名のシート(なかったら作成されます)にFF数とFF比のデータが記録されているかと思います。

あとは定期実行するトリガーを設定する

GASファイルのページの編集->現在のプロジェクトのトリガーをクリックしトリガー設定ページに移動し、新規作成をします。

あとはお好みで設定してくださいという感じですが、自分の場合はmain関数を実行し、日次で23時~24時の間に実行するようにしました。

これで定期実行してFF数を計測できると思います。不明点あればコメント欄で教えて下さい。