GASを使ってTwitterアカウントのフォロー・フォロワー数を日次で取得してスプレッドシートに記録してみる
Twitter APIの利用申請
検索すれば結構出てくるので割愛。
参考:https://www.itti.jp/web-direction/how-to-apply-for-twitter-api/
Twitter認証周りのGASファイル作成
GASからTwitterを使うときに認証する必要があって、そのコードがライブラリ化(TwitterWebService
)されてます。ただ、OAuthのバージョンが古く認証ができないので、自分でコピーを作成して最新のバージョンにする必要があります。
GASファイルを作成してGistのコードをコピペし、GASのページのリソース->ライブラリを選択してOAuth1を最新のバージョンにします。
最新のバージョンにしたら、そのGASファイルのIDをメモっておきます。https://script.google.com/d/xxx/edit
のxxx
の部分が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 API
のConsumer API key
とConsumer 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/usercallback
(xxx
の部分に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数を計測できると思います。不明点あればコメント欄で教えて下さい。
Discussion