週末文書

とりあえず、まぁ、週末です。

「相づちくん」のTwitter Bot化

今週のできごと

週明け一週間は夏休みということになっています。妻の実家のある仙台に行こうと思っていたのですが、コロナの状況から「来ないほうがいい」となりました。ちょうど、妻が腰を痛めたということも重なりまして、家で静かに暮らすことになりそうです。

「相づちくん」のTwitter Bot

WebアプリとしてHerokuでデプロイした「相づちくん」をTwitter Bot化してみました。手順としてはだいたい、下記の流れで行いました。

Twitterのdeveloper登録とAPIキー、トークンの入手

  • こちらの記事「Twitter API 登録 (アカウント申請方法) から承認されるまでの手順まとめ ※2019年8月時点の情報 - Qiitaを参考にして、developer登録を行いました。
  • 上記の記事は2019年8月時点と書かれてますが、最初の開発目的を選択する部分以外はほとんど同内容の登録画面でした。
  • Webで登録した後、APIの使用目的についての追加質問のメールが来ましたが、記事にかかれているものと同じ内容の質問でした。
  • 英語なので多少面倒くさいですが、DeepLを使って機械翻訳して回答することで問題ありませんでした。
  • 一点迷ったのは、developer.twitter.comにログインする際のアカウントです。ついつい、普段自分がTwitterを見るために使っているアカウントでログインしそうになりました。しかし、APIを使って投稿する先はBOT用のアカウントにしたいので、急いでTwitter上にアカウントを新規作成し、そのアカウントでdeveloperにログインしました。

メンションされたら相づちを返信するTwitter Botプログラムの作成

  • pythonで TwitterAPIを使う際には、tweepyというコンポーネントを使うことが多いようです。
  • tweepyを使用例の記事は多数ありますが、いくつか見ながらコードを書き、疑問点をまた調べるということを繰り返したところ、結局、こちらの記事Tweepyで雑にTwitter botを作ってみた - Qiitaと同じことをやろうとしていることに気づき、この記事のコードを大いに参考にさせてもらいました。
    • この記事では、3件のコード例の最後のものが、TwitterのStream APIを使った「特定の文字列に反応するbotを作る」というケースになっています。ただ、この記事が書かれた時点とTwitterのStream APIの仕様が変わっていて、このコード例のままだとプログラムが動きません。(必ず、error code 404のエラーとなってしまいます)
    • 具体的には、下記に引用したコード例一番最後の行のuserstream機能が廃止となっているため機能しません。
stream.userstream()
    • この行を次のようなfilter機能を使った記述に改める必要があります
stream.filter(track = ["受信したいツイートに含まれる文字列(キーワードや\
BotのTwitterアカウント名など”])
  • 結果として、Botのアカウントにメンションすると、肯定的な相づちを返答してくる、というプログラムができました。
  • このバージョンをHerokuにデプロイすることも考えたのですが、もう少し機能を追加してからにしようと考えています。

週末プロジェクトの状況

人工無脳の設計

  • 「元気が出る会話」とは何か決める
  • 人工無脳の実装方式を決める
    • 写経したコードを使って「とにかく肯定的なあいづちを返すタイプ」の人工無脳 を作成し、ローカルなpythonプログラム→Webアプリ化→Twitter Bot化という一連の流れをチュートリアル的にやってみました。
    • 次のステップですが、「何かしら気晴らしを提供するタイプ」の機能をTwitter Botに追加してみようと思っています。

人工無脳の開発

人工無脳の公開

  • 公開環境を整える
    • 上述のように「相づちくん」に機能追加し、「週末bot」としてTwitter Bot化したいと思っています。
  • 運用体制を整える
  • プログラムを公開する