ぼっちでも寂しくない。
前回はGASでA3RTを触りました
relativelayout.hatenablog.com
折角なので何か作ろうと思い、TwitterのBOTを作ってみました。具体的には、自分がつぶやいた内容に関して、しつこく合いの手を入れてくれるBOTです(笑)
いざ実装
とはいえ、ウェッブなエンジニアリングが苦手なので、今回もIFTTT様に頼って行きていこうと決めました。
- つぶやく
- IFTTT経由でTwitterをトリガーにGASで作ったWebAPIを叩く
- GASからA3RTのTalk APIを叩いて、リプライ文言を作成
- IFTTT経由でリプライ専用アカウントからつぶやく
GASからTwetterを直接叩けばいいじゃんっていうツッコミはなしで。最初はこんな感じで実装してたのですが、IFTTTからGASにWebhookをなげるところが上手く行かなかったので、Google DriveのSpreadsheetを介して、Twetter⇒GASにツイート情報を渡しています・・・。
うん、これは酷い。とりあえず動くことを確認したかったので、お許し下さい。
どんな感じに動くのか
クソコードは長くなるので、後ほど。
「会社行きたくないな」ってつぶやくと、数分後に心配してくれるリプライをくれます(笑)
たまに会話が噛み合わないこともありますが、ネットストーキングの如く、必ずリプライをくれます。
気づくとこんな感じに。
クソコードはこちら
IFTTTでTwitter⇒Driveに情報を渡すと、リツイートやメンションも渡してしまうので、GASでそれらのツイートは無視するようにしています。下記のloop()を定期実行しています。
var url = "https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk";
var apikey = "xxxxx";
var iftttUrl = "https://maker.ifttt.com/trigger/xxx/with/key/xxx";
var sheetId = "xxx";
var sheetName = "xxx";
function loop(){
if(!isSheetDataAvailable()){
Logger.log("no data");
return;
}
var lastTweet = getSheetData();
Logger.log(lastTweet);
clearSheetData();
if(lastTweet.lastIndexOf('RT', 0) == 0){
Logger.log("ignoring retweet");
return;
}
if(lastTweet.lastIndexOf('@', 0) == 0){
Logger.log("ignoring mention");
return;
}
var message = ask(lastTweet);
Logger.log(message);
triggerIfttt("@pokiiio " + message);
}
function ask(message){
var payload =
{
"apikey" : apikey,
"query" : message
};
var options =
{
"method" : "post",
"payload" : payload
};
var response = UrlFetchApp.fetch(url, options);
var result = JSON.parse(response.getContentText())["results"][0]["reply"];
return result;
}
function isSheetDataAvailable(){
var spreadsheet = SpreadsheetApp.openById(sheetId);
var sheet = spreadsheet.getSheetByName(sheetName);
var maxRow = sheet.getLastRow();
return maxRow > 0;
}
function getSheetData(){
var spreadsheet = SpreadsheetApp.openById(sheetId);
var sheet = spreadsheet.getSheetByName(sheetName);
var data = sheet.getSheetValues(1, 1, 1, sheet.getLastColumn());
return data[0][0];
}
function clearSheetData(){
var spreadsheet = SpreadsheetApp.openById(sheetId);
var sheet = spreadsheet.getSheetByName(sheetName);
sheet.clear();
}
function triggerIfttt(message){
var payload =
{
"value1" : message
};
var options =
{
"method" : "post",
"payload" : payload
};
UrlFetchApp.fetch(iftttUrl, options);
}