はじめに
概要
気になるあの人がツイートしたらそれを自動でスプレッドシートに記録しよう。
何かあったときのために自動でスクリーンショットも撮って保存しちゃおう。
使うもの
全体の仕組み
- ZapierがTwitterアカウントを監視する(たぶん15分おきに見に行ってる)
- Zapierが最新ツイートを取得したらスプレッドシートに記録する
- スプレッドシートに変更があったら(2で記録されたら)GASのトリガー発火
- GASでAPI FLASHにリクエストを投げてTwitterスクショ生成
- 生成したスクショをGoogleドライブに保存する
完成イメージ
つくりかた
1. Googleスプレッドシートで下準備
新しいスプレッドシートを用意して1行目にヘッダーだけ作っておく。
ここでの例:
- created at ... ツイート日時
- user name ... Twitterアカウント名
- text ... ツイート内容
- url ... ツイートURL
- screenshot ... スクショURL
2. ZapierでZapを作成する
Trigger (User Tweet in Twitter)
- Choose app & event ... Twitter / User Tweet
- Choose Account ... 自分のTwitterアカウント
- Setup Trigger ... 監視したいTwitterアカウント
Action (Create Spreadsheet Row in Google Sheets)
- Choose app & event ... Google Sheets / Create Spreadsheet Row
- Choose account ... 自分のGoogleアカウント
- Set up action ...
- Drive ... My Google Drive
- Spreadsheet ... 1で用意したスプレッドシート
- Worksheet ... 任意
- 以下、スプレッドシートで作成したヘッダーの項目と取り込む項目を一致させる
3. GASでコード記述&トリガー作成
コード記述
コード.gs
function takeScreenshots() {
let sheet = SpreadsheetApp.openById('スプレッドシートID').getSheetByName('シート名');
let sheetLastRow = sheet.getLastRow();
let ssLastRow = sheet.getRange(sheet.getMaxRows(), 5).getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
let tweetUrl = null;
if(sheetLastRow !== ssLastRow) {
for(i = ssLastRow + 1; i <= sheetLastRow; i++) {
url = sheet.getRange(i, 4).getValue();
let fileUrl = takeAScreenshot(tweetUrl);
sheet.getRange(i, 5).setValue(fileUrl);
}
}
}
function takeAScreenshot(tweetUrl) {
let folderId = 'GoogleドライブのフォルダID';
let now = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'YYYYMMdd-HHmmss');
let access_key = 'API FLASHのアクセスキー';
let requestUrl = 'https://api.apiflash.com/v1/urltoimage?access_key=' + access_key + '&url=' + tweetUrl;
try {
UrlFetchApp.fetch(requestUrl);
Utilities.sleep(1000 * 10);
let image = UrlFetchApp.fetch(requestUrl).getBlob();
fileUrl = folder.createFile(image).setName('任意の名前' + now).getUrl();
} catch(error) { //API FLASH月上限の100Screenshotsを超えてしまった場合など
fileUrl = 'none';
}
return fileUrl;
}
トリガー作成
- 実行する関数 ... takeScreenshots
- 実行するデプロイを選択 ... Head
- イベントのソースを選択 ... スプレッドシートから
- イベントの種類を選択 ... 変更時
- エラー通知設定 ... お好みで
結果
自動でツイートが記録されて、Googleドライブにスクショが保存されるようになったよ。
追記(2022/5/2)
API FLASHの無料プランは月100枚までしかスクショが撮れないので、リクエストのエラーが返ってきたときの例外処理をコードに追加。