Y-Ken Studio

新しもの好きのデータエンジニアが四方山話をお届けします。

FluentdでURL付きツイートを漏れなく収集する方法

Twitterで言及されている様々な記事のURLを収集したいと考えた時、次の方法が選択肢となります。

  • 定期的にAPIを叩く
  • ストリーミングAPIを使う

前者の方法では単位時間毎のAPIコール制限を容易に超えてしまうので避けたいところですね。
そこでストリーミングAPIを使いたい所ですが、URLのトラッキングを行う方法がわかりにくかったので調べてみました。

ストリーミングAPIでのURLトラッキング方法

その方法は意外なほどシンプルでした。
ドットやスラッシュなどの記号を半角スペースにして、コンマに並べるというものです。

例えば、"example com"と指定すると、次のパターンにマッチします。

  • example.com
  • www.example.com
  • foo.example.com
  • foo.example.com/bar
  • I hope my startup isn’t merely another example of a dot com boom!

参考: https://dev.twitter.com/streaming/overview/request-parameters#track

設定サンプル

先ほどの手法を元に、fluent-plugin-twitterを用いてツイートを収集する方法はこちらです。
なお、事前にFluentdを実行する環境およびTwitterAPIキーの準備が整っていることとします。

<source>
  type twitter

  # APIキーを指定
  consumer_key        *******************
  consumer_secret     **************************************
  oauth_token         **************************************
  oauth_token_secret  **************************************

  # タグを指定
  tag twitter.keyword

  # 取得タイムライン種別を指定
  timeline tracking

  # 収集したいキーワードを指定 (qiita.comとmatome.naver.jpのURL付きツイートを収集)
  keyword qiita com,matome naver jp

  # もしツイートの言語を絞る際は指定する
  #lang ja,en

  # データ構造
  output_format nest
</source>

# JSON形式でローカルディスクに保存する
<match twitter.keyword>
  type file
  path /var/log/td-agent/twitter_keyword_*.json
  symlink_path /var/log/td-agent/twitter_keyword.json
  format  json
  append  true
  compress gzip
</match>

なお、もしハッシュタグを検索したい場合にはトリッキーですが、次のようにプレースホルダを指定してみてください。 "#matome" であれば、keyword ${hashtag}matomeと設定しましょう。プラグイン内で自動的に展開されてハッシュタグとして扱われます。

まとめ

Fluentd Advent Calendar 22日目の内容は、Fluentd+twitterプラグインのTips紹介でした。
Twitterのデータ収集など、オンラインバッチ処理にもってこいのデータソースですね。
是非何かに役立ててみてください。