週末文書

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

「相づちくん」の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にデプロイすることも考えたのですが、もう少し機能を追加してからにしようと考えています。
続きを読む

結局、Atomエディタのlinterが動いた話

2年前にPythonの勉強を始めた際、Atomエディタにlinterを入れて、コードのpep8によるコーディング規約との整合性のチェック機能を追加しようとしたら、うまくいきませんした。

その時の状況を「Atomエディタのlinterが動かない話 - 週末文書」という記事に書いて本ブログに投稿したところ、今でもちらほらアクセスがあります。

単なる「動かなかった」という話をそのままにしておくのも気持ちが悪いし、やっぱり整ったコードを楽に書ける環境がほしいと思い、改めてAtomへのlinterパッケージを導入をやってみることにしました。

今回参考にさせてもらったのは、「AtomでPythonの開発環境を整える(linter, atom-beautify)」という記事です。

続きを読む

「相づちくん」のデプロイ

今週のできごと

今週は雨続き+コロナ感染も拡大中、ということで、会社もテレワーク・週末もパソコン三昧とディスプレイを眺めて過ごしました。夏も盛りの時期だというのに味気ないものです。

「相づちくん」のデプロイ

chatuxを使ってSPA化した「相づちくん」ですが、Herokuの環境にデプロイしてみました。

f:id:medihen:20210815203018p:plain
iPhoneからアクセスした「相づちくん」の画面

まず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版の「相づちくん」を作成しました。

f:id:medihen:20210814205235p:plain
SPA版「相づちくん」の画面(chatux使用)
続きを読む

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とは何か?

続きを読む

箕面ビール、うまうま。

今週のできごと

7月の連休あたりから本格的な夏の暑さを迎え、これはおいしいビールを飲みたい!気分が盛り上がりました。家族で相談したところ、昨年、息子に教えてもらったクラフトビール・「大阪・箕面(みのお)で生まれた地ビール 箕面ビール ::: MINOH BEER」をまた飲みたいということになりました。前回は1ダースくらいだったと思いますが、今回はたっぷり飲みたいよね〜ということで、ちょっと奮発して6種類・各4本の24本セットを購入しました。

f:id:medihen:20210809124818j:plain

瓶のラベルも鮮やかで、食卓に並べても映えるのが箕面ビールの嬉しいところ。

6種類、どれも缶ビールでは味わえないコクというか旨味があって、夏の暑さも和らぐおいしいビールの味を楽しむことができました。6種類の中では、苦味の効いたスタウト、少し華やかさのあるペールエール、ホップが効いたおさるIPAが特に美味しかったです。

家族3人で飲んでいると、すぐに飲みきってしまうのが残念。またお取り寄せしたくなる箕面ビールでした。

続きを読む

my first Flask app: 相づちくん

FlaskのTutorialを一通り追ったので、tutorialのアプリケーションを参考にして、Webアプリを一個作ってみることにしました。

とりあえずは、以前作っておいた「とにかく肯定的なあいづちを返す」人工無脳=相づちくんをFlaskでWeb化してみます。

f:id:medihen:20210723152943p:plain
Flaskのアイコン

作業は下の順番で進めることにしました。

  • 1. hello worldを表示
  • 2. 入力された文をそのまま表示
  • 3. 「とにかく肯定的なあいづちを返す」人工無能との結合
    • Webアプリのプログラム中で読み込むファイルをどこに置くか
  • 4. 連続して入出力結果を表示するチャット的な表示
  • 5. デザインを改善(Bootstrapを利用してみる)

なかなか迂遠ですが、Flaskも初めてなら、人工無脳的Webアプリ(つまりチャット的Webアプリ)というものをどう作るのかプログラミングレベルで考えたこともないので、ステップ・バイ・ステップでいくことにします。しかし、そのステップ分けが妥当かどうかも判断つかないレベルなので、う〜むという感じですが。

続きを読む