Twitterの特定のハッシュタグをmattermostに投稿するbotつくった

昨日学科のLT大会があった。 毎年LT大会ではツイートを流すスクリーンがあるのだけれど、リモート開催なので学科のmattermostにTwitterが流れる仕組みがあれば面白いかな〜と思い雑に実装した。

もともとTwitterAPIはアプリを申請していたので使用できる状況にあったのだけれど、User Streams APIが廃止されていたので出来るかどうか微妙だった。 軽く調べるとUser Streams APIの代わりにStreaming APIがあるらしく、この中のstatus filterを使えばだいたい行けそうだった。 鍵垢のツイートが取れないというのはあるが、まぁ...。

それとmattermostへのwebhookはslackのものをエンドポイントをmatrtermostにすればいいだけらしく、これもわりと簡単そうだった。

というわけで雑に検索して出てきたgolangTwitter API SDKと、slackへのメッセージSDKをいい感じにして実装した。

f:id:anatofuz:20200504075508j:plain

結構いい感じですね。

golangで実装していたので、手早くローカルからLinux用にビルドして、学科のubuntu VM上でsystemdをつかって動かしていた。 基本的には特に障害も無く元気に動いてたので良かった気がする。

まぁなんとなく一応リポジトリ作った。

github.com

実装おもしろポイント

ハッシュタグの大文字小文字が区別されない

今回はクエリパタメーターとして v.Set("track", "#ieLT") を渡している。 これはツイート中に#ieLTがあるツイートのみを抽出するものである。(学科LTのハッシュタグ)

TweetDeckやなどをつかっていると大文字小文字は区別されるので #IELT#ieLT は別物扱いになる。 しかしこのAPIか、 golangのライブラリの仕様かは定かではないが、大文字小文字の区別がなく #IELT も収集されてしまうので雑に#IELTが含まれていたら弾くようにした。

今回は変なbotは出なかったが、bot避けに軽度緯度で日本国内に限定するとかしても良いかもしれない。

Tweetプロフィール画像の高画質化

今回のAPIで取得できるプロフィール画像https://pbs.twimg.com/profile_images/1153141142998794240/Yt9814c5_normal.jpgと _normalがついている。

これだと実際の画像が の様にあまり画質が良くない(サイズが小さい)

個人的な趣味でなるたけ高画質で取ってきたかったので、雑に_normalを取り除いて https://pbs.twimg.com/profile_images/1153141142998794240/Yt9814c5.jpg なURLに変更すると

とそこそこ高画質化される