TwitterもMSNもIRCにまとめちゃう
TwitterやMSNメッセンジャーをターミナルで使いたいなぁ->ターミナルで使えるチャットソフトといえばIRC->TwitterやMSNメッセンジャーのゲートウェイを使おう、というわけで色々試してみた。
この図のように
- サーバ上でTwitterのゲートウェイ(tig.rb)とMSNのゲートウェイ(BiltBee)を動かす
- 同じサーバ上でIRC ProxyのTiarraを動かす。これでログインしていない間のログも見れるようになる。
- Terriaに適当なIRCクライアントで接続する。
サーバはMac miniなので、tig.rbとかはlaunchdで動かすようにした。
tig.rb
tig.rb (twitter irc gareway) - 冬通りに消え行く制服ガールは✖夢物語にリアルを求めない。 - subtech
これが一番大変だった。launchdで動かすと何故か動かない。
launchdだと$HOMEがnilになるのが原因っぽい。適当に修正する。
*** net-irc/examples/tig.rb.old 2008-07-17 23:28:02.000000000 +0900 --- net-irc/examples/tig.rb 2008-07-19 11:45:30.000000000 +0900 *************** *** 152,158 **** @groups = {} @channels = [] # joined channels (groups) @user_agent = "#{self.class}/#{server_version} (tig.rb)" ! @config = Pathname.new(ENV["HOME"]) + ".tig" @map = nil load_config end --- 152,159 ---- @groups = {} @channels = [] # joined channels (groups) @user_agent = "#{self.class}/#{server_version} (tig.rb)" ! @config = Pathname.new(ENV["HOME"] || '~mzp') + ".tig" @map = nil load_config end
あと、いくつかのIRCクライアントだと上手く接続できない。どうも改行コードが違うらしい。適当に修正する。
*** lib/net/irc/server.rb 2008-07-17 23:28:01.000000000 +0900 --- lib/net/irc/server.rb 2008-07-19 12:48:31.000000000 +0900 *************** *** 90,97 **** on_connected while l = @socket.gets begin @log.debug "RECEIVE: #{l.chomp}" ! m = Message.parse(l) next if on_message(m) === true name = "on_#{(COMMANDS[m.command.upcase] || m.command).downcase}" --- 90,98 ---- on_connected while l = @socket.gets begin @log.debug "RECEIVE: #{l.chomp}" ! m = Message.parse(l.chomp+"\r\n") next if on_message(m) === true name
あと、launchdの設定ファイルはこうなる。
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd > <plist version='1.0'> <dict> <key>Label</key><string>tig</string> <key>ProgramArguments</key> <array> <string>/opt/local/bin/ruby</string> <string>/opt/net-irc/tig.rb</string> <string>--log=/var/log/tig</string> <string>--host=example.com</string> </array> <key>OnDemand</key><false/> </dict> </plist>
BiltBee
おおむねindex.rb [nofuture.tv]に書いてある通りでいい。ただ、Macではxinetdは使わないので、launchdの設定で対応する。
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd > <plist version='1.0'> <dict> <key>Label</key><string>BitlBee</string> <key>ProgramArguments</key> <array> <string>/opt/local/sbin/bitlbee</string> </array> <key>inetdCompatibility</key> <dict> <key>Wait</key><false /> </dict> <key>Sockets</key> <dict> <key>Listeners</key> <dict> <key>SocNodeName</key> <string>example.com</string> <key>SockServiceName</key> <string>16650</string> </dict> </dict> </dict> </plist>
Tiearra
Tiarra : Archiveに書いてある通り。Log::ChannelとLog::Recentを有効にするのがお勧め。
launchdのplistは次の通り。tiarraを置いてあるディレクトリが、作業ディレクトリになるようにする。
cat /Library/LaunchDaemons/tiarra.plist <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd > <plist version='1.0'> <dict> <key>Label</key><string>tiarra</string> <key>ProgramArguments</key> <array> <string>/usr/bin/perl</string> <string>/opt/tiarra/tiarra</string> </array> <key>OnDemand</key><false/> <key>WorkingDirectory</key><string>/opt/tiarra/</string> <key>StandardOutPath</key><string>/var/log/tiarra</string> <key>StandardErrorPath</key><string>/var/log/tiarra.error</string> </dict> </plist>
クライアント
MacならConversation、LinuxならxchatかircIIがお勧め。