背景
Qiitaで記事がツイートされると通知が来るのがちょっと嬉しいので、Poinでも同じようなことをしたくて調べています。
Twitter Streaming APIとは
Twitter Streaming APIを利用すると、ツイートをリアルタイムなストリームとして取得することができます。Twitterそのものですね。
もちろんすべてのツイートをモニターするのは現実的ではありませんが、filterという機能を使用することで特定条件に合致するツイートのストリームを取得できます。
Twitter Streaming API
statuses/filter
なぜAmazon SNS + SQSに転送するのか
Steaming APIは非常に魅力的なのですが、取得できるのは接続中のツイートのみで過去にさかのぼってツイートを取得することはできません。そのため、Steaming APIを使うプログラムはできる限りダウンタイムを短くする必要があります。
しかし、ツイートの使い方にはいろいろな可能性があります。プログラム修正時にはどうしてもダウンタイムが発生しますし、もしかしたら複数のプログラムからツイートを利用したくなるかもしれません。
このように入力側と出力側を疎結合させたい場合に、Amazon SNS + SQSは大きな力を発揮します。
入力側
Twitter Streaming API経由でストリームを受け取り、ひたすらAmazon SNSにポストします。僕はJava Servletとして実装し、Elastic Beanstalkにデプロイしました。負荷は低いのでt2.microで十分処理できます。
出力側
出力側では目的毎にSQSキューを作成し、上記のSNSトピックを購読します。あとはSQSキューをポーリングしながら処理を進めるだけです。ダウンタイムにもキューが溜まるだけなので、安心してコーディングを進める事ができます。