Skypeのデフォルトの機能では、Twitterからメッセージを拾ってくることは出来ない。さてどうしたものか?とGoogle先生に聞いてみたら、既に連携している人が居るではないか。このサイトで掲載されているプログラムを動かすべく、DBusやらpkg-configやらをインストールしたり、CPANで各種Perlモジュールをインストールしまくったりして、無事にこのプログラムを動作させることが出来た。しかし動作エラーが出てSkypeのムードメッセージが変更されない。なんでかな?と思ってさらに色々調べた結果・・・気がついた。「あ、これLinux専用じゃん!」
そんなわけで一連のインストール作業は徒労に終わったわけだが、日本男児たるものその程度で諦めるようではいけない!
気を取り直してちゃんと調べたところ、Mac OS XではSkype.frameworkを使ってSkypeをコントロールすることができるということが分かった。(最初から気づけよ>俺)このフレームワークを使って書かれたTwitter/Skype連携プログラムは存在しないようだし、ならばしょうがないからこのフレームワークを使ってプログラムを書くか!ということになるわけですな。
で、出来たプログラムがこれ↓
#!/usr/bin/ruby
require 'rubygems'
gem 'twitter'
require 'twitter'
require 'osx/cocoa'
OSX.require_framework 'Skype'
class SkypeMood < OSX::NSObject
def clientApplicationName
return 'Skype Mood From Twitter'
end
addRubyMethod_withType 'skypeAttachResponse:', 'v@:i'
def skypeAttachResponse(status)
return if status != 1
puts 'Successfully connected to Skype!'
end
def isRunning
return OSX::SkypeAPI.isSkypeRunning
end
def setDelegate appname
OSX::SkypeAPI.setSkypeDelegate self
end
def setMood text
OSX::SkypeAPI.sendSkypeCommand "SET PROFILE MOOD_TEXT #{text}"
end
end
class AppController < OSX::NSObject
@DEFAULT_INTERVAL = 60
attr_accessor :sm
def setAuth email, pass
@httpauth = Twitter::HTTPAuth.new(email, pass)
end
def initTimer interval
OSX::NSTimer::scheduledTimerWithTimeInterval_target_selector_userInfo_repeats(checkInterval(interval),self,:timerJob,nil,true)
end
def checkInterval interval
return interval == 0 ? @DEFAULT_INTERVAL : interval
end
def timerJob
return unless @sm.isRunning
timeline = Twitter::Base.new(@httpauth).user_timeline
@sm.setMood timeline[0].text
end
end
def usage
puts "Usage: #{$0} your.name@domain.com password [check interval]"
exit 1
end
usage if ARGV.length < 2
sm = SkypeMood.alloc.init
OSX::SkypeAPI.setSkypeDelegate(sm)
OSX::SkypeAPI.connect
c = AppController.new
c.setAuth ARGV[0].to_s, ARGV[1].to_s
c.initTimer ARGV[2].to_s
c.sm = sm
OSX::NSRunLoop.currentRunLoop.run
即興で作ったプログラムなので、なんでRubyなの?とかエラー処理が甘いんじゃね?などという点には目をつむって頂きたい。
使い方は簡単。
1. まずはこのプログラムを/usr/local/bin/twittermood.rbなどに保存しよう。
2. コマンドを実行する。
shell> twittermood.rb メールアドレス パスワード インターバル
これらはTwitterに登録したメールアドレスとパスワードを使う。インターバルは秒単位だ。
3. Twitterに投稿する。
4. しばし待つ。
5. Skypeのムードメッセージに反映される。
6. プログラムを終了させるときはCtrl-CまたはkillコマンドでOK。
ただし、このプログラムはそのままでは利用出来ない。このプログラムで利用しているtwitter gemとSkype.frameworkをインストールする必要があるからだ。
Skype.frameworkのインストールは簡単だ。次のコマンドを使おう。
shell> sudo cp -r /Applications/Skype.app/Contents/Frameworks/* /Library/Frameworks
twitter gemは、gemコマンドでインストールすることが出来るのだが、gem自信のバージョンが1.3.1以上でないとインストール出来ないので、まずは先にgemをアップグレードしなければならない。俺のマシンでは、元々インストールされているgemは1.0.1だった。gemのアップグレードとインストールを行う一連のコマンドは次の通り。
shell> wget http://rubyforge.org/frs/download.php/57643/rubygems-1.3.4.tgz
shell> tar zxf rubygems-1.3.4.tgz
shell> cd rubygems-1.3.4
shell> sudo ruby setup.rb
shell> sudo gem install twitter
そんなわけでTwitterの投稿をSkypeムードメッセージに登録したい人はお試しあれ!
追記: 上記のプログラムのライセンスはもちろんGPLv2 or later!!
できませんでしたー。こんなエラーメッセージでした。。。
返信削除/opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- osx/cocoa (LoadError)
from /opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from twittermood.rb:6