upinetree's memo

Web系技術の話題や日常について。

fluentdを使ってIdobataでニコレポを取得する

はじめに

先日ニコレポ用のfluentdプラグインを書きました。

https://github.com/upinetree/fluent-plugin-nicorepo

このまえ作ったニコレポgemを使って、ニコ動からニコレポを逐次取得してくれるすごいやつです。 (別にfluentdじゃなくてもいいじゃんというのはなしの方向で…)

いわゆる完全に俺得プラグインなんだけれども、使い方の説明の意味も含めて記事を書くことにします。

セットアップ

今回、fluentdはherokuで動かすことにします。 準備とかは下記のリンクが詳しいので参考にしつつやっていきます。

http://docs.fluentd.org/ja/articles/install-on-heroku

ひな形のClone

heroku-td-agentというheroku用の便利なひな形があるので利用します。

次のような感じでリポジトリ作りましょう。

$ git clone git://github.com/treasure-data/heroku-td-agent.git heroku-fluentd-nicorepo
$ cd heroku-fluentd-nicorepo
$ rm -fR .git
$ git init
$ git add .
$ git commit -m 'initial commit'

herokuアプリの作成とデプロイ

Heroku Toolbelt が入っていれば、次の方法でアプリの作成とデプロイができます。

$ heroku apps:create your-app-name
$ git push heroku master

動作確認

ここまで来たらひとまず動作確認します。

$ curl http://your-app-name.herokuapp.com/debug.sample -F 'json={"hoge": "fuga"}'
$ heroku logs --tail

2014-06-09T16:13:38.544846+00:00 app[web.1]: 2014-06-09 16:13:38 +0000 debug.sample: {"hoge":"fuga"}

上記みたいなのが出力されてたらOKです。

confの設定

さて、いよいよニコレポを取得してIdobataに流していきます。 あたりまえのことですが、ニコニコ動画のアカウントがあり、ニコレポで誰かをウォッチしている状態でないと、いつまでたっても何も流れてきませんのでご注意を。

今回、gemはfluent-plugin-nicorepofluent-plugin-idobataを使用します。 従ってGemfileは次の状態にします。

source 'http://rubygems.org'

ruby '2.1.2'

gem 'fluentd', '~> 0.10.48'
gem 'fluent-plugin-nicorepo'
gem 'fluent-plugin-idobata'

また、td-agent.confを次のように設定します。 今回は1時間おきに生放送だけを取りに行くようにしてみました。

<source>
  type nicorepo
  mail your@email.com
  pass yourpassword
  interval 1h
  kind lives
  tag nicorepo.idobata
</source>

<match nicorepo.**>
  type copy
  <store>
    type idobata
    webhook_url https://idobata.io/hook/url
    message_template <%= record[:body] %> @<%= record[:date] %> / <%= record[:title] %>: <%= record[:url] %>
  </store>
  <store>
    type stdout
  </store>
</match>

ニコ動のアカウントmail, passと、Idobataのwebhook_urlを書き換えるのを忘れないでください。 Idobataのwebhook_urlとは、流したいスレのRoom Settingsから'Add a Hook'して取れるEndpoint URLのことです。

再度デプロイしてあとは流れてくるのを待つだけです!

$ git add .
$ git commit -m 'setup nicorepo on idobata'
$ git push heroku master

あと、取得を1時間以上の間隔に設定する場合はこの設定やっておいたほうが良いかもです。

Heroku の Dyno を寝かせない - present

たまにheroku側で再起動して同じニコレポが2回やってきたりしますがご愛嬌。

お疲れ様でした。