Chienomi

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

プラグインの書き方を調べながら書いた。 色々インスペクションしたので、そこに時間がかかった。内容的には難しくない。

messagesArrayなのだけれど、その各要素はmsg.inspectするとHashに見えるが、実際はMessageクラスのオブジェクトだった。 Messageクラスはその内容をそのまま出力するメソッドがないようなので、msg.instance_variable_get(:@value)の形でデータを取得している。 もちろん、@valueに値が格納されていることを確認するまでが一番手間だった(全体で言えば、Messageクラスであることになかなか気づかなかった部分に時間がかかった)。

JSONライブラリは出力に際して1行にまとめてくれるため、単純に行出力していけば、行単位でパースして処理できるログファイルができあがる。

このあと、flockに対応させた。

ダイレクトメッセージも対応したかったが、on_direct_messagesの取り扱いがよくわからなかったので、そのままにした。

追記

GitHubにてコードは公開中。

Mikutterのプラグインページにも掲載させていただいた。