Twitterのbotの説明

そういやちゃんとまとまた説明を書いてないなと思ったので。
現在、Twitterで2つのbotを運用しており、それぞれ2つ、合計4つの機能を実装している。 botは全部Pythonで書いて、AWSのLambdaで定期実行している。

@Weather_markov

天気予報と自動生成ツイートの機能を実装している

天気予報

毎朝7時に、自分が住んでいる地域の天気予報を取得してリプライする。天気予報を毎朝確認するのが面倒で、じゃあTwitterで完結するようにしたらよくね?と思って開発した。自分は毎朝起きて最初にやることがスマホTwitterを確認することなので、ついでに天気予報を確認できるのは便利。

また、最高/最低気温が前日より5℃以上高いor低いときは気温差が大きいことを注意喚起したり、降水確率が一定以上高いときは傘を持っていくよう推奨したりする。天気予報のbotはたくさんあるが、前日との気温差に関する機能は珍しいんじゃないかと思う。

毎日同じ文章だと飽きるので、ランダムで違う文体になるようにした。

1つめ

2つめ

3つめ

4つめ

そのうち新しい文体を作るかも。

自動生成ツイート

毎日8時~26時に、タイムラインからツイートを取得し、それを元に新しく文章を生成してツイートする。

ツイートの生成にはマルコフ連鎖というアルゴリズムを利用しており、平たく言うと前の単語から次の単語を予測するロジックになっている。

例えば、以下の2つのツイートがあるとする

  • 今はわからないことばかりだけど信じるこの道を進むだけだ
  • 消える足場に挑戦するけどすぐに下に落ちる

このとき、マルコフ連鎖では「『けど』という単語の後には、『信じるこの道を進むだけだ』が50%、『すぐに下に落ちる』が50%の確率で続いている」と解釈する。その結果、以下のようなツイートを生成する。

  • 今はわからないことばかりだけどすぐに下に落ちる

たまに50%で同じ文章をツモり続けると、無限ループすることがある。

日曜の朝とか平日の昼間とか、特定の人しかタイムラインにいないときはその人のツイートばっかり拾ってる。

@Stallion_Result

競馬に関するツイートをするbot

自分はウイポをやっていたので、競馬は種牡馬単位で応援することが多い。でも種牡馬の産駒成績を一つ一つ確認するのは面倒だなーと思って開発した。

土日:産駒成績のツイート

毎週土曜と日曜の17時に、特定の種牡馬産駒の中央競馬での成績をツイートする。現在の対象種牡馬シルバーステートキタサンブラックサトノダイヤモンドサトノクラウンで、選出基準は単なる好み・趣味。サトノクラウンはフォロワーさんの推奨だった。

今後はブリックスアンドモルタルカリフォルニアクロームノーブルミッションコントレイルも対象に追加する予定。

水曜:産駒のスタッツのツイート

毎週水曜の21時に、2歳世代、3歳世代、全世代のAEIや勝ち上がり率をツイートする。対象種牡馬は↑と同じ。

さいごに

今は「2週間ごとにコンタクトレンズを交換するようリマインドしてくれるbot」の開発を考えている。要件上、完全にステートレスな実装が難しいのでFaaSで完結させるのは難しいなーと思ったり、そもそもこれTwitterbotでやる必要あるのか?と思ったり、開発は難航しているけど、気が向いたら実装するかもしれない。

Alexa用に色々買った感想

先日のプライムデーAmazon Echoその他諸々を買った。
購入したのは以下の3つ。

  • Amazon Echo
    • Echo第4世代
  • Nature Remo 3
    • Alexaと各種家電製品を繋ぐハブ機能を持つ
    • これを買うことで、Alexa経由でエアコンとかを操作できる
  • めざましカーテン mornin’plus
    • いわゆるスマートカーテン

エアコンの操作→◎

一番良かったのは、エアコンをスマホアプリや音声経由で操作できること。
Nature Remo 3はGPS機能を使えるため、例えば家から出たらエアコンを消して、家に近づいたらエアコンをつけるよう自動化できる。

また、深夜にエアコンを操作したいとき、従来なら暗闇の中リモコンを探して、スマホのライトで照らしながらポチポチボタンを押す必要があったが、AlexaならAlexa エアコン 25度の3単語を言うだけで完了する。

スマートカーテン→○

スマートカーテンとは、平たく言えば自動でカーテンを動かしてくれる機械のこと。
タイマーをセットすることで毎朝起きる時間の直前に自動でカーテンが開くようになり、日光で起床できるようになる。
のだが、動作音が思いの外大きく、日光より動作音で起きてしまうことも珍しくない。

こちらもGPSと連動可能で、家から出たらカーテンを自動で閉めるよう設定できる。

音楽再生→△

Alexaはスマートスピーカーなので当然スピーカーとしても使える。
例えば、Alexa、B'zと言えば2単語でB'zの曲を再生できる。
ただ、音声認識機能があまり賢くないので、思ったように再生できない。*1
スマホからBluetoothで繋げば自由に再生可能だが、それはもはや普通のワイヤレススピーカーと変わらない。

好きなアーティストや曲について、音声認識ができるか試した結果。

  • ◯:再生可能
  • △:たまに認識をミスる or 「Apple Musicで」とつけたら再生可能
  • ✕:再生不可能
アーティスト名/曲名/作品名 結果 備考
Rhapsody 葛飾ラプソディーが再生された
Gloryhammer
Twilight Force
Powerwolf
Alestorm
Beast In Black
Amaranthe
B'z
Fear and Loathing in Las Vegas
THE ORAL CIGARETTES Alexaはザ・オーラルシガレッツと発音する
真赤な誓い
ツッパリくんvs 関取マン 日本語と英語(vs)が混ざるとAlexaが解釈しにくいのか?
鳥の詩 鳥の声が再生された
ハレ晴レユカイ
String Theocracy
行列のできるえーりん診療所 のだめカンタービレの曲が再生された
ワルキューレがとまらない
エアーマンが倒せない
piece of youth
We Are the World
Welcome to the Black Parade
もってけ!セーラーふく カバーバージョンが再生された(オリジナルverはサブスク上にない)
ハナマル☆センセイション 同上
ブルーアーカイブ 小倉唯のClear Morningが再生された。曲名にもアーティスト名にもブルアカの文字は入っておらず、なぜ再生できたのか謎。
ヒプノシスマイク
Re:ステージ

アニソンは個人曲とユニット曲と全体曲なんかがあり、作品名とアーティスト名義が一致しないことが多く、だいたい上手く認識してくれない。
これはプレイリスト機能を使えば一応解決可能で、例えばラブライブの曲を「ラブライブ」というプレイリストにまとめて、Alexa プレイリスト「ラブライブ」を再生してと言えばいい感じに再生してくれる。
プレイリスト名はAlexaが理解しやすいよう配慮する必要がある。
ここまで手間をかけると本末転倒な気もするが……。

ヒプノシスマイクはアーティスト名義の中に作品名が入っている影響か、そのままでも上手く再生された。

2列目がアーティスト名義。

音楽再生機能はまだまだ課題も多く、「この曲をピンポイントで聞きたい」という使い方は難しい。
ただ、ジャンル単位やアーティスト単位など、大まかに指定して曲を聞くならけっこう便利。

この記事ではAmazon Echo等の感想を書いた。
個人的には、エアコンの操作だけでも元を取れたと思っている。
Echoデバイスは9月27日までセール中なので、気になる人はどうぞ。

*1:アーティスト名の前に「Apple Musicで」をつけると多少賢くなる。Apple Musicの部分は、Alexaが対応してるサブスクサービスならなんでも可

競馬のクラシック一冠馬の古馬G1成績をカウントしよう

ウマ娘や、某配信者がウイポをプレイしていた影響で競馬に興味を持った。
そして、クラシック一冠馬はその後の古馬G1をどれくらい勝っているのかが気になったので、調べてみた。

続きを読む

海外サッカーリーグの寡占度をハーフィンダール指数で考える

某配信者がFIFA22をプレイしていたのがきっかけで海外のサッカーリーグに興味を持った。
そのとき驚いたのが、どのリーグもだいたい同じクラブが優勝していること。
せっかくなので、今回はハーフィンダール指数を使って各リーグの寡占度を計算した。

続きを読む