こんにちは、GAS大好きのもり(@moripro3)です!
「Google Apps ScriptでTwitterBotを作ろう!」をシリーズでお届けしています。
このシリーズで作るのは「自分のブログからランダムな1記事を取得して、タイトルとURLを、毎日指定の時刻に自動ツイートするBot」です。
前回は、GASでTwitterに投稿する機能を作りましたね!
そして、シリーズ全体の流れがこちらです。
【Step1】Twitter Developerアカウントの申請(済)【Step2】アプリ情報を登録してAPIキーを取得する(済)【Step3】ブログ記事の一覧をGoogleスプレッドシートに作成する(済)①WordPressの既存記事の一覧をCSV出力する②新規投稿記事のタイトルとURLをスプレッドシートに追記する仕組みを作る(IFTTT使用)
【Step4】GASでTwitterに投稿するスクリプトを作る(済)- 【Step5】GASでスプレッドシートのデータを取得してツイートする ← 今回はコレをやるよ
Contents
GASでTwitterに投稿するスクリプト
前回作成したスクリプトがこちらです。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// ツイートを投稿 function postTweet() { var service = twitter.getService(); var endPointUrl = 'https://api.twitter.com/1.1/statuses/update.json'; var response = service.fetch(endPointUrl, { method: 'post', payload: { status: 'これはGASからのツイートだよ' } }); } |
postTweet関数を実行すると、このようにTwitterに投稿できます。
payloadのstatusオプションがツイート本文です。ここに、ツイートしたい文字列を置くのが今回の目的です。
スプレッドシートからランダムな1行を取得してツイートするスクリプト
ツイートする内容はこの3つです。
- ヘッダー(日付+固定文字列)
- 記事タイトル
- 記事URL
ツイートのイメージがこちら
titleとurlは、スプレッドシートの2行目~最終行の間でランダムに取得します。
それでは、下記の3つを作っていきます
- header
- title
- url
今日の日付データを作成(header)
ヘッダー部の「3月6日(水)」のような日付データを作成する関数です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
//日付情報を作る function getDateInfo() { var date = new Date(); var month = date.getMonth() + 1;//月 var day = date.getDate();//日付 var arrDay = ['日','月','火','水','木','金','土']; var dayNum = date.getDay();//曜日を0~6の数字で取得 var dayStr = arrDay[dayNum]; var dateInfo = month + '月' + day + '日(' + dayStr + ')'; return dateInfo;// ex)3月6日(水) } |
ランダムな行番号からタイトルとURLを取得(title+url)
スプレッドシートからランダムに「記事タイトル」と「記事URL」を取得し、headerと結合して、ツイート本文を作成する関数です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
//Twitterに投稿するメッセージを作成する function CreatePostMessage() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート1'); var lastRow = sheet.getLastRow(); //2行目~最終行の間で、ランダムな行番号を算出する var row = Math.ceil(Math.random() * (lastRow-1)) + 1; //ランダムに算出した行番号のタイトルとURLを取得 var title = sheet.getRange(row, 1).getValue(); var url = sheet.getRange(row, 2).getValue(); var header = getDateInfo() + 'のもりのPickup記事はコチラ▷'; var postMessage = header + title + '\n\n' + url; return postMessage; } |
ランダムな行番号を取得する方法
ポイントはこの1行です
var row = Math.ceil(Math.random() * (lastRow-1)) + 1;
①Math.random()
→0以上1未満の乱数を返す
②Math.ceil(x)
→xの小数点以下を切り上げた整数を返す
最終行の行番号は変数lastRowに格納されています。lastRow = 50のときの計算イメージです。2~50までのランダムな数字が算出されます。
var row = Math.ceil(Math.random() * (lastRow-1)) + 1;
Twitterに投稿する
前回作成したpostTweet関数の、payloadのstatusオプションにツイート本文を当てはめればOKです。ここでは、変数postMessageとしてます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// ツイートを投稿 function postTweet() { var postMessage = CreatePostMessage(); var service = twitter.getService(); var endPointUrl = 'https://api.twitter.com/1.1/statuses/update.json'; var response = service.fetch(endPointUrl, { method: 'post', payload: { status: postMessage } }); } |
スクリプトまとめ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
//日付情報を作る function getDateInfo() { var date = new Date(); var month = date.getMonth() + 1;//月 var day = date.getDate();//日付 var arrDay = ['日','月','火','水','木','金','土']; var dayNum = date.getDay();//曜日を0~6の数字で取得 var dayStr = arrDay[dayNum]; var dateInfo = month + '月' + day + '日(' + dayStr + ')'; return dateInfo;// ex)3月6日(水) } //Twitterに投稿するメッセージを作成する function CreatePostMessage() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート1'); var lastRow = sheet.getLastRow(); //2行目~最終行の間で、ランダムな行番号を算出する var row = Math.ceil(Math.random() * (lastRow-1)) + 1; //ランダムに算出した行番号のタイトルとURLを取得 var title = sheet.getRange(row, 1).getValue(); var url = sheet.getRange(row, 2).getValue(); var header = getDateInfo() + 'のもりのPickup記事はコチラ▷'; var postMessage = header + title + '\n\n' + url; return postMessage; } // ツイートを投稿 function postTweet() { var postMessage = CreatePostMessage(); var service = twitter.getService(); var endPointUrl = 'https://api.twitter.com/1.1/statuses/update.json'; var response = service.fetch(endPointUrl, { method: 'post', payload: { status: postMessage } }); } |
Twitterにツイートを連続投稿しすぎるとアカウントが凍結される恐れがあります。
CreatePostMessage関数でツイート本文が想定どおりに作成されているかは、ログ出力で確認しましょう。
指定の時間にスクリプトを自動実行する
これで、スプレッドシートの記事一覧から、ランダムにタイトルとURLを取得してツイートする仕組みができました
プロジェクトのトリガーを設定
時計のマークをクリックします(現在のプロジェクトのトリガー)
画面右下の「+トリガーを追加」をクリック
赤枠欄を設定して、右下の「保存」をクリック
- 実行する関数はpostTweet
- 時刻は1時間単位で指定
これで設定完了です!
トリガーの編集
設定内容を変更したい場合は、鉛筆マークをクリック
まとめ
シリーズおつかれさまでした!
各回の目次です!おさらいにどうぞ!
「GoogleAppsScriptでTwitterBotを作ろう!」シリーズ目次はコチラ