この記事は KMC Advent Calendar 2017 - Adventar 3日目の記事です.このカレンダーの内容は kyp (id:kypa) さんの尽力によって下の記事に逐一まとめられるので,良ければ参照してください.kyp (id:kypa) さん,がんばってくださいね.
昨日の記事はkata(id:kaptambns)さんの ツイートで振り返る自転車で琵琶湖一周 - KMCアドベントカレンダー用のブログ でした.
そんなワケで、明日の記事にはutgwくんのwizardryプレイ日記あたりを予想しておきます。よろしくお願いします。
ツイートで振り返る自転車で琵琶湖一周 - KMCアドベントカレンダー用のブログ
wizardryはプレイしたことないので,Twitterで画像付きツイートをいいねしたら保存しつつSlackに流すやつの話をします.
こんにちは
こんにちは,KMC3回生の id:utgwkk (utgw) です.寒くなってきましたね. デレステの2周年ガチャで森久保・しゅがは姉さん・奈緒を人質に取られたと思ったら,モバマスの6周年アイプロで森久保・しゅがは姉さん・美玲を人質に取られる,といった休まることのないプロデューサー生活をしています.
画像付きツイートをいいねしたら保存しつつSlackに流すやつ
私のTwitterアカウント*1をフォローしている方ならご存知かとは思いますが,私は時おりすごい勢いで画像付きツイートをいいねしています. その理由は,「Twitterで画像付きツイートをいいねしたら,画像と各種情報を保存しつつSlackに流す」BOTが動いているからです. そしてこちらはその概念図です*2.この一連の流れを私は「救い」と呼んでいます.
このブログでも何度か触れていますが,改めて技術的な解説や,そしてブログにはまだ書いていなかった,従来と変わった点についてまとめていこうと思います.
「このブログでも何度か触れていますが」です.こちらもどうぞ.
解説
BOTの概要
このBOTは自分が契約しているVPS上で,systemdのuser unitとして動いています. 使用言語はRubyです.
Twitterで画像付きツイートをいいねしたことを検知する
このBOTは,私がTwitterで画像付きツイートをいいねしたことをトリガーとして種々の動きが発動される仕組みになっています. リアルタイムにツイートをいいねした,という情報を得るために Twitter Streaming API を利用しています. Twitter Streaming API では,自分のタイムラインの新規ツイートの他に,
- 誰かが自分をフォロー/アンフォローした
- 誰かがツイートをいいねした
などの情報もリアルタイムに流れてきます. その中から自分のツイートをいいねした,という情報を見て,かつそのツイートに画像が添付されていれば,一連の動きをやっていきます.
画像をダウンロードする
Twitter Streaming API で降ってきた自分のいいね情報には,いいねしたツイートの情報がついてくるので,そこを見れば画像のURLも全部分かります. あとはそれをダウンロードするだけでいいのですが,ここでVPSの容量は有限*3であることに気づきます. 何が言いたいかというと,自分が契約しているVPSのストレージ上に画像を無尽蔵にダウンロードすることは不可能です.
そこでAmazon S3の出番です. Amazon S3とは,平たく言うと格安で使える無限のストレージのことです. この上に無尽蔵に画像を保存することができる上に,一意なURLも振られるので,いつでもそこからダウンロードすることができます.
S3には当然APIが存在しており,そのRubyライブラリを使って自動的にS3上に画像を保存していきます.
ツイートをSlackにシェアする
こちらは単にツイートのURLをSlackの特定チャンネルにシェアしているだけです. RubyでSlack APIを叩くライブラリがあり,それを利用しています.
ツイート/画像のデータを保存する
のちのち出てきますが,あとから画像を検索したくなることがあります. そのためにツイートの本文や保存元のURLなどをMySQL上に保存しています.
画像をあとで検索する
画像をあとで検索する用のwebアプリケーションを作り,そこを眺めながら安寧を得る,という生活をしています. ただ全文検索できるだけでは物足りないので,何を狂ったか絞り込み検索を実装しました.具体的には,
- AND検索 (AとBの両方を含む)
- OR検索 (AかBの少なくともいずれかを含む)
- 除外検索 (Aを含まない)
に対応しております. これでいつどこで画像の検索のデモをするときでも,職場閲覧不適切なコンテンツを弾くことができます.
毎日の活動を振り返る
毎日0:00に,1日に保存した画像の枚数を集計し,同じSlackチャンネルに流しています. 同様に毎月1日の0:00に,先月に保存した画像の枚数を集計して流しています.
昨日保存された画像は 148 枚でした.これまでに 100287 枚の画像が保存されています.
これは昨日(12/2)の結果です.ついに画像の保存枚数が10万枚を超えました.
現状
こういったインフラを整備した結果,生活の質は遥かに向上し,私がいいねした画像付きツイートを流すチャンネルはKMCのSlackで第2位の発言数を誇っております*4.ログ逼迫してごめんね*5*6.
この活動はおよそ2年以上続いており,気がつくといろいろな部員による「画像付きツイートをいいねして流す」チャンネルができていました. 私は,Twitterのいいね欄には,人間のありさまが見えると思っており,その可視化の一環であるこの取り組みが少し広まっていることを興味深く思っています.
ひとこと
「リツイートを表示しない」があるなら,「いいねを表示しない」もあっていいと思うんですけど,そこのところどうなんですか?
— うたがわきき🔰💊 (@utgwkk) 2017年11月30日
宣伝
KMCでは,己の煩悩と向き合い,生活の質を上げるための最高のツールを作りたい部員を募集しています.KMCに入部制限はありません.どなたでも入部できます.詳しくは入部案内ページをご覧ください.
また,KMCはコミックマーケット93にも出展します.部誌やゲーム・音楽CDの頒布を予定しています.私が書いた記事もあるのでぜひお越しください.
C93に当選しました! 金曜日 東ク33b です!
— 京大マイコンクラブ (@KMC_JP) 2017年11月2日
今回も部誌やCDの頒布を行う予定です。よろしくお願いします!https://t.co/KZLqMa5AQb pic.twitter.com/5iUohqpD9n
さらに,去年に引き続き部員がイラストを描いて投稿するアドベントカレンダーが動いております.こちらもどうぞ.
次回予告
明日は gnu さんによる「.ioドメイン2017年のまとめ - Qiita」です. いいドメイン取るの面白いけど出費のことを先に考えてしまってなかなか手が出ないんですよね…….
*1:https://twitter.com/@utgwkk
*2:このかわいい輿水幸子ちゃんのイラストは https://twitter.com/moka0x0/status/899292948986085377 です
*3:50GBぐらい.
*4:第1位は「個人用メモチャンネルの発言を収集して流す」という狂ったチャンネルです.ちなみに最近停止したのでこれから勝つ予定です.
*5:部員が作ったログ取りBOT&検索アプリケーションがあるからそんなに心配してない.
*6:そろそろ課金したほうがよくない?