#Twitterのフォロワー数をロギングする
ひとつのアカウントのフォロワー数をロギングするのは以下の記事などで紹介されているが、複数のアカウントのTwitterフォロワーをロギングするスクリプトがなかったので書いてみた。
Google Apps Script 講座初級編「GASでTwitterのフォローフォロワー数をスクレイピングする」
##スプレッドシートの構成
A1:Aは日付を入れるセル。
B2:D2はIDを入れるセル。
現在数値が入っている箇所にフォロワー数を取得して入力したい。
##スクリプト
function myFunction() {
//シートを取得
var sheet = SpreadsheetApp.getActiveSheet();
//RowとColumnの数を取得
var lastRow = sheet.getLastRow();
var lastColumn = sheet.getLastColumn();
//日付を取得・入力
var today = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd HH:mm:ss');
sheet.getRange(lastRow+1,1).setValue(today);
//UrlFetchAppのオプションを設定する。
var options = {
muteHttpExceptions:true
};
//各支部のIDからフォロワー数を取得する処理
for(var i =2; i <= lastColumn; i++){
var twitterid = sheet.getRange(3,i).getValue();
console.log(twitterid);
//URL生成
var url = 'https://twitter.com/' + twitterid;
//responseにHTTPリクエストの結果を代入している。
var response = UrlFetchApp.fetch(url,options);
var html = response.getContentText('UTF-8');
var title = html.match(/data-count=(\d.*?)\s/g);
if(title[2] == undefined||null){
continue;
}else{
var follows = title[1].match(/data-count=(\d.*?)\s/)[1];
var followers = title[2].match(/data-count=(\d.*?)\s/)[1];
//フォロワー数を入力
sheet.getRange(lastRow+1, i).setValue(followers);
}
}
}
###困ったこと
UrlFetchAppで参照するリンク先、つまり、対象のTwitterページがアカウント制限されていたり、アカウント削除されている場合に、エラーが出てしまい、途中で処理が止まってしまっていた。
これを回避するためにif文でundefinedの時は処理を飛ばすようにした。
一応これで動くようになったが、完璧とは言えない。
###今後
GASはjavascriptベースと言うことでjavascriptも追加。
コーディングが汚い、醜いのを改善する。
##追記
自分の支部の年間広報計画にGASで毎週自動でフォロワー数を入力するように設定した。
###コード
function myFunction() {
//シートを取得
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getSheetByName('年間広報計画');
//RowとColumnの数を取得
var lastRow = sheet.getLastRow();
var lastColumn = sheet.getLastColumn();
//行先頭列から左方向に取得する
var lastCol2 = sheet.getRange(5, sheet.getMaxColumns()).getNextDataCell(SpreadsheetApp.Direction.PREVIOUS).getColumn();
//UrlFetchAppのオプションを設定する。
var options = {
muteHttpExceptions:true
};
//各支部のIDからフォロワー数を取得する処理
var twitterid = "study42ku";
//URL生成
var url = 'https://twitter.com/' + twitterid
//responseにHTTPリクエストの結果を代入している。
var response = UrlFetchApp.fetch(url,options);
var html = response.getContentText('UTF-8');
var title = html.match(/data-count=(\d.*?)\s/g);
var followers = title[2].match(/data-count=(\d.*?)\s/)[1];
//フォロワー数を入力
sheet.getRange(5, lastCol2+ 1).setValue(followers);
}
###気をつけること
スクリプトでは5行目の最大行からCtrl+左キーをしたときと同じ動作をするようにしてある。
スプシ編集で気をつけないとエラーを吐くようになる。