読者です 読者をやめる 読者になる 読者になる

まめ畑

ゆるゆると書いていきます

Twitterのポストをmixiボイスにも投稿するスクリプト書いた

Ruby mixi

先日のおれおれmixiボイスUtilを使って、TwitterのPOSTをボイスにも投稿するProxyを書いてみた。
主にTwitterクライアントのProxyに設定して使う感じです。


使ってみた感じは、mixiに投稿されていると思うと、うかうかと変な事を発言出来なかった。
そんな時は、handlerの中にフィルターなどを作ってボイスには投稿したくない発言を弾いてやればいいと思います。

ボイスへの投稿に若干時間がかかるため、スレッドを使用して処理を投げてます。
hndlerはサーバからのレスポンス戻ってから呼び出されるので送信前に処理が書けないのが残念。。
ボイスへの投稿時のエラー周りが甘いので直したいところです。


お好きに改変して使って下さい。

# -*- coding: utf-8 -*-

require "uri"
require "webrick"
require "webrick/httpproxy"
require "mixi_voice"

$KCODE = "U"


mixi_voice = Mixi_Voice.new("ID", "PASS")

handler = Proc.new do |req, res|
   begin
   if req.host == "twitter.com" && req.request_method == "POST" && req.path == "/statuses/update.xml"
      req.body =~ /status=([^&]+)/
      Thread.new($1) do |message|
         mixi_voice.post_message(URI.decode(message))
      end
   end
   rescue Exception => e
      puts e
   end
end


conf = {
   :BindAddress => "127.0.0.1",
   :Port => 8080,
   :ProxyVia => false,
   :ProxyContentHandler => handler,
   :Logger => WEBrick::Log::new($stderr, WEBrick::Log::DEBUG)
}

proxy = WEBrick::HTTPProxyServer.new(conf)
[:INT, :TERM].each do |sig|
   Signal.trap(sig) do
      Thread::list.each do |t|
         Thread::kill(t) if t != Thread::current
      end
      proxy.shutdown
   end
end

proxy.start

Webrick使うと簡単に出来ますね。