俺のブログがこんなに痛いわけがない!

オタクコンテンツの話とプログラミングの話が中心

Google Apps Script でTwitterのおみくじbotを作った話

 ディジコンアドベントカレンダー企画3日目担当かつ、はてなブログ初投稿なので舐められないよう硬派な記事を書きたいと思います。

 Twitterで「おみくじ」と送ったら、おみくじの結果を返してくれるbotGoogle Apps Script【GAS】で作ってみました。その過程を今回の記事にしたいと思います。(硬派)

完成目標

bot おみくじ」とリプライがきたら、おみくじの結果を返してくれるようにします。

Google Apps Script【GAS】を始める

GASとは何かについてはこちらをご覧ください。

tonari-it.com

 

【準備】

 まずはグーグルのスプレッドシートを開いておみくじの結果を書き出していきます。

f:id:masayasviel:20171201214153p:plain

A1には「1」を入れておきましょう。ここにリプライをくれたアカウントのIDを入れます。

B列におみくじの結果を書き連ねていきます。

 

Twitterのアプリケーション認証とライブラリのインポート

以下のサイトに書いてある「軽く動作テスト」まで進めましょう。

webird-programming.tech

 

botとしてのプログラムを書いていく

Twitter.gsと別のスクリプトファイルに書いていきましょう。

function myFunction() {
 reply();
}

//自動返信
function reply(){

 //spreadsheetという名前のシートを取得
 var ss = SpreadsheetApp.openById('spreadsheet');
 var sheet = ss.getSheetByName('シート1');

 //最後に取得したリプライのIDをシートから取得
 var last_id = sheet.getRange("A1").getValue();
 var retobj = {};
 retobj = getNewReply(last_id);
 last_id = retobj.last_id;

 //gasの動作制限にかかった場合は強制終了
 if (retobj['replies'] ==false) return;
 retobj['replies'].forEach(function(value,index,array){

  //リプライの送信者と受信者が違うことを確かめる
  if(value['in_reply_to_screen_name']!=value['user']['screen_name']){
   var text = value['text'];
   text = text.replace(/ /g," ");
   if ( text.indexOf('bot') != -1) {
    text = text.replace(/bot/g,"");

    if ( text.indexOf('おみくじ') != -1) var mes = omikuji();
    text = text.replace(/おみくじ/g,"");

    //リプを送る
    var status = "@"+value['user']['screen_name']+" " + mes;
    var replyTo = value.id_str;

    Twitter.tweet(status,replyTo);
   }
  }
 });

 sheet.getRange("A1").setValue(last_id);
 Logger.log(last_id);
}

//idを記憶
function getNewReply(last_id){
 resp = {}
 resp['replies'] = Twitter.api('statuses/mentions_timeline',{'since_id':last_id})
 if(resp['replies'].length>0&&'id_str' in resp['replies'][0]){
  last_id = resp['replies'][0]['id_str']//最新のIDを保存しておく
 }
 resp['last_id'] = last_id;
 return resp;
}

 

//おみくじの結果をランダムでとってくる

function omikuji(){
 try{

  //spreadsheetという名前のシートを取得
  var ss = SpreadsheetApp.openById('spreadsheet');
  var sheet = ss.getSheetByName('シート1');
  var rand_res = ~~( Math.random() * 9 ) +1;
  var rangeString = "B" + rand_res;
  var range = sheet.getRange(rangeString);
  var result = range.getValue();

  return result;

 }catch(e){
 }
}

これで完成ではありません。

リプライが来たらGASのスクリプトが実行されるよう、トリガーを設定しましょう。

f:id:masayasviel:20171202204240p:plain

ここで設定します。

f:id:masayasviel:20171202204622p:plain

詳しい説明は割愛させていただきますが、このように設定します。

 

あとは「関数を選択」のところで「myFunction」を選んで実行すれば、完成です!

フォロワーに「bot」と「おみくじ」という単語を含んだツイートを送ってもらいましょう!

 

参考にさせて頂きました。

routecompass.net

完成!

f:id:masayasviel:20171202205404j:plain

感想

今回作ってみて、色々と勉強になりました。僕はまだプログラミング初心者なので、様々な技術の勉強をしつつ、今後GASで更に高度なことが出来たらと思います。

拙い文章、ガバガバな解説でしたが、ここまで読んでいただき、ありがとうございました。

僕はディジコンアドベントカレンダー企画で後二つ記事を書かせていただきます。よろしければ是非お読みください。ではまた~

 

おほほほ!お~っほっほっほ!!