Tweets保存のためのMikutterプラグイン
有用なユーティリティコード
- TOP
- Old Archives
- Tweets保存のためのMikutterプラグイン
とりあえずコード
# -*- coding: utf-8 -*-
require 'json'
Plugin.create(:save_timeline) do
logdir = "#{ENV['HOME']}/.mikutter/plugin/save_timeline/log"
on_update do | service, messages |
File.open("#{logdir}/#{BOOT_TIME.strftime("%y%m%d%H%M%S")}.#{service.user || "default"}", "a") do |f|
messages.each do |msg|
f.puts JSON.dump msg.instance_variable_get(:@value) rescue puts $!
end
end
end
# on_direct_messages do |service, dms|
# end
end
プラグインの書き方を調べながら書いた。 色々インスペクションしたので、そこに時間がかかった。内容的には難しくない。
messages
はArray
なのだけれど、その各要素はmsg.inspect
するとHash
に見えるが、実際はMessage
クラスのオブジェクトだった。
Message
クラスはその内容をそのまま出力するメソッドがないようなので、msg.instance_variable_get(:@value)
の形でデータを取得している。
もちろん、@value
に値が格納されていることを確認するまでが一番手間だった(全体で言えば、Message
クラスであることになかなか気づかなかった部分に時間がかかった)。
JSON
ライブラリは出力に際して1行にまとめてくれるため、単純に行出力していけば、行単位でパースして処理できるログファイルができあがる。
このあと、flockに対応させた。
ダイレクトメッセージも対応したかったが、on_direct_messages
の取り扱いがよくわからなかったので、そのままにした。
追記
GitHubにてコードは公開中。
Mikutterのプラグインページにも掲載させていただいた。