こんにちは、だいちゃんです。
昨日に引き続き 、GASによる自動過去記事ツイートBotを実装していきます!
今日は実際にツイートする部分を実装していこうと思います。
本来なら、ツイートする為にはTwitterのAPI申請をしなければいけないのですが、それがめちゃくちゃめんどくさいです。途中で諦めたことが3度ほどありますw でも今回使うIFTTTなら、めんどうな申請無しでツイートすることができます!IFTTTは他にもWebサービス同士を連携させることが出来るので他にも色々使ってみたいです!
ツイッターとの連携が済んでる前提で、下記を行います。
{{value1}}
だけになってればOK参考: TwitterのAPI申請なんてやりたくない!GASからIFTTTを経由してTwitterにツイートを投稿してみよう - ポンコツエンジニアのごじゃっぺ開発日記。
では実際にGASからIFTTTを通してツイートする部分を実装していきます!
function postTweet(contents) {
var key = '**上記でメモったYour keyってやつ**';
var eventName = '**上記でメモったEvent Nameってやつ**';
var url = 'https://maker.ifttt.com/trigger/' + eventName + '/with/key/' + key;
var data = {'value1':contents};
var headers = {
"Content-Type": "application/json"
};
var options = {
'method' : 'post',
'headers' : headers,
'payload' : JSON.stringify(data),
};
UrlFetchApp.fetch(url,options);
}
postTweetという関数に、ツイートしたい内容を引数で渡してあげるだけで簡単にGASからツイートできるようになりました!
ここで、下記のようなコードを書いて動かしてみれば、実際の動きを確認することができます。
function testTweet() {
postTweet('テスト\nツイートです。\n\n#テストツイート')
}
これでちゃんとツイートされると結構嬉しいです(ニヤニヤ
あとは、スプシの中身からランダムで記事を選んで、ツイートされる内容を自動で作る部分を実装していきます!
function makeTweet() {
var spreadsheetUrl = 'https://docs.google.com/spreadsheets/d/**スプシのIDみたいなやつ**/';
var spreadsheet = SpreadsheetApp.openByUrl(spreadsheetUrl);
var sheet = spreadsheet.getSheetByName("シート1");
var header = [
'🎊 ブログやってますっ 🎊',
'🎊 ブログの紹介 🎊',
];
var RowLength = sheet.getRange(1, 1).getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow();
var rm_atcl = Math.floor( Math.random() * RowLength ) + 1;
var rm_head = Math.floor( Math.random() * header.length );
var title = sheet.getRange(rm_atcl, 2).getValues();
var link = sheet.getRange(rm_atcl, 3).getValues();
var tweet = header[rm_head] + '\nブログの記事をランダムでツイートしてます!今日の記事はこちら▼\n\n' + title + '\n' + link + ' #無趣味の戯言';
sheet.deleteRows(rm_atcl);
postTweet(tweet);
}
どういう処理になっているかというと、、、
配列に見出しになるワードを入れてます。この中からランダムで1つ選ばれる想定です。上記コードでは2つだけですが、実際は8パターンくらい用意しています。 残りのパターンはツイートをおたのしみに(笑)
RowLength
には、A列の何行目までデータが入っているか=行数が入ります。
rm_atcl
と rm_head
にはそれぞれ、記事選定用・見出し選定用の乱数が入ります。仕組みとしては、 Math.random()
関数を利用することで出来るらしいです。詳しくは下記サイトの「2 つの値の間のランダムな整数を得る」を参照してください (丸投げ)
Math.random() - JavaScript | MDN
sheet.deleteRows(rm_atcl)
は、rm_atcl で選ばれた行を まるっと削除する関数 です。
記事数が少ないので、毎日全記事からランダムに選んだとしても、例えば50記事しか無ければ 1/50 の確率で 翌日も連続して同じ記事がツイートされてしまいます。
それでも悪くはないんですが、避けれるならなるべく避けたいので、 一度記事一覧を作ったらそれを全て消化し終わるまで記事一覧を取得しないように 下記のようなロジックにしました。
記事一覧を一度作ると、すべての記事をツイートし終わるまで、最新記事が反映されなくなってしまいますが、そもそも過去記事を掘り起こすことが目的なので、そこは気にしません。
function tweetblog() {
var spreadsheetUrl = 'https://docs.google.com/spreadsheets/d/**スプシのIDみたいなやつ**/';
var spreadsheet = SpreadsheetApp.openByUrl(spreadsheetUrl);
var sheet = spreadsheet.getSheetByName("シート1");
var RowLength = sheet.getRange(1, 1).getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow();
if( RowLength < 1) {
getArticleList();
}
makeTweet();
}
スプシの中を確認し、一覧が空になってた時だけ getArticleList()
(サーバー上のsummary.jsonを参照してスプシに記事一覧を作成します。
その後、 makeTweet()
(スプシからランダムで記事を選んでツイートする関数)を実行します。
この tweetblog()
にトリガーを設定して、毎日20時〜21時に発動するようにしています。
これで一通り、スプシを元にツイートをするbotをGASで実装することができました。動いた嬉しさのまま勢いで書いたので読みづらい箇所もあるかと思いますので、こっそり手直しもしておこうと...思いま...su
気が向いたら。
ここまでのまとめは下記からどうぞ〜