トレンドに応じたWikipediaページを投稿するTwitter BotをHerokuでデプロイ
なんとか作った「相づちくん」Twitter Botが実質的にBANされてしまいました。しかし、せっかく作ったTwitterと Herokuのアカウントを放っておくのももったいないので、お手軽Botを作って走らせてみました。
続きを読む日本のトレンド「 ティンさん 」に関係するかもしれないWikipediaページ : パリクティン山https://t.co/zGxlB9COCz
— 週末bot (@weekendlog_bot) 2021年8月25日
自動返信Twitter Bot「相づちくん」、実質的にBANされるの巻
2日前にメンションされたら肯定的相づちを返信するTwitter Botを作成しました。
やっていることは単純で、
- tweepyのストリーミングAPIで自分をメンションするツイートを待つ。
- メンションを受信したら、そレに対して相づち(ファイルに記録された語句をランダムに選択)をリプライする(元のメンション・ツイートのidを使って、tweepyのupdate_status()をコールする)
というだけです。簡単なコードなのですが、これで相づちを返すTwitter Botを簡単に作ることができました。
ところが、今朝、テストのために Bot宛にメンション・ツイートを送るのに使ったアカウントをチェックしたら、Botからのリプライが全て非表示になっていました。Botのアカウントで見ると、普通にリプライしています。ところが、返信先やその他のアカウントでは、Botの返信ツイートが表示されません。
PCの場合は完全に表示されないので何がおきたかわかりませんでしたが、iPhoneで見てみたら、Botのリプライに対して「このツイートは表示できません。詳細はこちら」というTwitterからのメッセージが付加されていました。
理由はよくわからないのですが、 Botからの自動応答機能は(確かに危ない感じもするので)認められていないんだろうと解釈し、あきらめて他の機能を作ってみることにしました。
「相づちくん」の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で TwitterのAPIを使う際には、tweepyというコンポーネントを使うことが多いようです。
- tweepyを使用例の記事は多数ありますが、いくつか見ながらコードを書き、疑問点をまた調べるということを繰り返したところ、結局、こちらの記事Tweepyで雑にTwitter botを作ってみた - Qiitaと同じことをやろうとしていることに気づき、この記事のコードを大いに参考にさせてもらいました。
stream.userstream()
-
- この行を次のようなfilter機能を使った記述に改める必要があります
stream.filter(track = ["受信したいツイートに含まれる文字列(キーワードや\ BotのTwitterアカウント名など”])
- 結果として、Botのアカウントにメンションすると、肯定的な相づちを返答してくる、というプログラムができました。
- このバージョンをHerokuにデプロイすることも考えたのですが、もう少し機能を追加してからにしようと考えています。
結局、Atomエディタのlinterが動いた話
2年前にPythonの勉強を始めた際、Atomエディタにlinterを入れて、コードのpep8によるコーディング規約との整合性のチェック機能を追加しようとしたら、うまくいきませんした。
その時の状況を「Atomエディタのlinterが動かない話 - 週末文書」という記事に書いて本ブログに投稿したところ、今でもちらほらアクセスがあります。
単なる「動かなかった」という話をそのままにしておくのも気持ちが悪いし、やっぱり整ったコードを楽に書ける環境がほしいと思い、改めてAtomへのlinterパッケージを導入をやってみることにしました。
今回参考にさせてもらったのは、「AtomでPythonの開発環境を整える(linter, atom-beautify)」という記事です。
続きを読む「相づちくん」のデプロイ
今週のできごと
今週は雨続き+コロナ感染も拡大中、ということで、会社もテレワーク・週末もパソコン三昧とディスプレイを眺めて過ごしました。夏も盛りの時期だというのに味気ないものです。
「相づちくん」のデプロイ
chatuxを使ってSPA化した「相づちくん」ですが、Herokuの環境にデプロイしてみました。
まずHerokuのPythonチュートリアル・Getting Started on Heroku with Python | Heroku Dev Centerを一通りやった後、さまざまなWeb記事で紹介されている「FlaskアプリのHerokuへのデプロイ」記事を参考にしました。
各.pyファイル内のimportパスの書き方とか、chatuxのチャットUIがデータ取得する先の記述とか、細々したことを変えなければならなくて引っかかりましたが、無事、インターネットを介して「相づちくん」にアクセスすることができるようになりました。
my first Flask app: 相づちくん(その2 SPA/チャットUI化の巻)
先週、Flaskを使った初めてのチャットボットWebアプリケーション「相づちくん」を作成しました。
ただ、このバージョンはフォームを使って入出力を行うものなので、入力するたびに画面全体が書き換わってしまって、チャットっぽさがまったくありません。
ここはやはり、入出力を連続して表示するSPA(Single Page Application)を行いチャット風画面作りを目指したいと思いました。そこで、webで発見したチャット用のUIをフロントエンドとして使って、チャットUI版の「相づちくん」を作成しました。
続きを読むSSR(Server Side Rendering)におけるレンダリングとは
SPA(Single Page Appliation)のアーキテクチャが飲み込みずらくて、あれこれ調べたところ、Client Side Rendering(SPA)・SSR・SSG を整理してみた - 7839と言う記事を発見しました。
この記事は大変わかりやすい図で整理してくれていて、SPAでのサーバとブラウザの動作、それらの間で流れるデータなどを飲み込むことが(一応)できました。
この記事では、SPAの他に、SSR(Server Side Rendering)とSSG(Serve Side Generator)というアーキテクチャについても紹介しています。
ここで引っ掛かったのが、SSRにおけるRenderingという言葉です。元記事中、SPAについても「CSR(Client Side Rendering)とほぼ同意語」と書いていて、ここにもRenderingが出てきます。
では、ここで言うRenderingとは何か?
続きを読む