おいす~(traP内で流行っている任意の時間の挨拶)
eiyaです。
この記事は夏のアドベントカレンダー2018の9/2の記事です。
最近宣伝ツイートを無限にRTするRTbotなるものを作成しました。
今回はその作成の過程を紹介しようと思います。
traP入部前
度々宣伝ツイートをbotでツイートする機会がありました。ところがbotツイートをすると、自分のアカウントのツイートがbotツイートで埋もれて、他のツイートが見られなくなるという現象が発生していて困っていました。
そこでツイートじゃなくてRTにしようとしました。(RTなら宣伝を見たくない人もRTミュート出来ますしね)
ところが検索すると「固定ワードを見つけたらRT」というbotは見つかるんですが、あるツイートをRTし続けるbotが見つからない...悲しい...
仕方が無いので自作しようと思いましたが、当時の僕はC++でのWindowsゲーム製作と競プロしか知らなかったので作れませんでした。
思考回路としては
- 上手くライブラリを使えばRTは出来る
- 自動化する方法が分からない
- ループで待機することは出来るけど、常にPCを起動しっぱなしにする必要があり、現実的でない(と当時の僕は思っていました)
という感じです。
traP講習会
5月にtraPに入部し、講習会に参加しまくります。
Webアプリ講習会で、Webアプリの作成、公開方法を勉強しました。
この時はGoでTODO管理アプリを作りました。
Webアプリも動かしている間はPCが起動していないといけないという制約を受けますが、Webアプリは基本的に起動しっぱなしであるサーバー上で動かすことができます。
traPは部内サーバーを持っていて、作ったアプリを簡単に部内サーバー上で動かすことが出来ます。
また、Twitter bot講習会やって欲しいと言ってたら本当に開いてくれました。
RubyでツイートやTL取得などの基本的な事を出来るようになりました。
これで必要な知識は揃いました。
製作
3週間ほどかけて色々試行錯誤した結果、こういう構成になりました。
- タイマーにはGoogle Apps Scriptを使います。これには「(正確ではないが)一定時間ごとに一度関数を呼び出す」という機能があり、その関数の中でWEBアプリにアクセスします。Googleアカウント持っていれば簡単に使えて良いです。
- Goで書いたWEBアプリ側は、Google Apps Scriptからのアクセスを認識したらその場でRTを実行するRubyスクリプトを呼び出します。
- 同じツイートをRTすることは出来ないので、一度RTをキャンセルする必要があります。
- キャンセルにはRTidが必要なのですが、RTidの取得方法が分からなかったので、RT時のレスポンスに含まれているRTidをDBに突っ込んで大事に取っておくという手法を使いました。
- Rubyを使った理由はTwitter bot講習会の言語がRubyだったからです
- 同じツイートをRTすることは出来ないので、一度RTをキャンセルする必要があります。
- 完成したらtraPのサーバーにデプロイして動かします。
感想
- これは僕がtraPに入って初めての制作物ですが、入部してわずか一か月くらいで自分の全く知らなかった分野でアプリを作れるなんて凄い良い環境だなぁと思いました。
- 上で紹介した以外にも様々な講習会が開かれています。先輩方ありがとうございます。
- サーバーを自分で用意しなくても良かったのはとても有難かったです
- この記事を書くために見直して思ったのですが、このアプリ凄まじくサンプルの継ぎ接ぎという感じがします。あまりスマートでは無いですね...
- 今のところバグ無しで動いているから良しとしよう
- traPは良いぞ