TwitterBotをGASで自作した

ウェブの海

最近このブログのドメインの意味を本気で考えてしまいます。
devなのに……。

HerokuのFreeが終了してしまった

Twitterに自作短歌を6時間ごとにつぶやくBotを自作したのですが、環境が

  • Heroku
  • Python

だったのです。
が、最近HerokuのFreeが終わってしまうことにいまさら気づき、これはまずいと作り直しを決断しました。

環境どうしよう

何をどうするか考えて、Firebase使うとかいろいろあったのですが、なんとかして無料で作りたかったので、環境はGoogleAppScriptとGoogleスプレッドシートを使う方向で落ち着きました。

GASは仕事でも使ったことがあるので、なんとかなるだろうとGoogle先生に質問を投げまくりなんとか完成しました。

作り方

スプレッドシートに短歌をひたすら書きます。
カテゴリ分けてA列やB列を使おうか考えたのですが、設定しなおすこともなかなか……と思い、敢えてA列だけに書いていきます。

スクリプトはこうなりました。

code.gs

let twitter = TwitterWebService.getInstance(
  'TwitterのAPI key', //API Key
  'TwitterのAPI Secret key' //API secret key
);

//アプリを連携認証する
function authorize() {
  twitter.authorize();
}

//認証を解除する
function reset() {
  twitter.reset();
}
 
//認証後のコールバック
function authCallback(request) {
  return twitter.authCallback(request);
}



function twitterPost() {
  let ss = SpreadsheetApp.getActiveSpreadsheet();
  let sheet = ss.getSheetByName('words');
  let rows = sheet.getLastRow(); 

  let number = Math.floor(Math.random()*(rows));
  let words = sheet.getRange(number,1).getValue();
  let service  = twitter.getService();
  let endPointUrl = 'https://api.twitter.com/2/tweets';
  let message = {
    text : words,
  }
  
  let options = { 
    "method": 'post',
    "muteHttpExceptions" : true,
    'contentType': 'application/json',
    'payload': JSON.stringify(message),
  }
  let response = JSON.parse(service.fetch(endPointUrl, options));
 
}

Twitterのdeveloperアカウントを取ります。
全部英語で書かないといけないので覚悟してください。
あと50単語書いてね、などと出てきます。英作文です。

ほかもろもろAPI keyなどを取得するのですが、アプリを作る際にv1も「Read & Write」の権限にしておかないとv2も書き込みができないので要注意です。

参考記事

とても参考になりました。ありがとうございます。
https://qiita.com/kagawakensan/items/bc8b8f0e333187b5f545