rubyでskypebotを作る
環境はUbuntu10.04
skype apiを使うためにvncサーバーを起動する
tightvncを使ってたんだけどキーボード配列がおかしい。adgjを押すとasdfと出る。真ん中の段はズレがわかるけど他の段はメチャクチャ
vnc4serverに換えたらokだった
sudo apt-get remove tightvncserver sudo apt-get install vnc4server which vncserver vncserver
これでmacのScreen Shareing.appから接続できる。192.168.1.9:5901とか。
そこでskypeをインストールして、bot用アカウントを作って起動する。
linuxでRubyからskypeを使うのはSkypeRとRuby4Skypeの2つがあるので両方いれてみる
sudo apt-get install libdbus-ruby sudo gem install rbus yaparc SkypeR Ruby4Skype
skypeを起動しているvncの中でterminalを起動して試す。
ruby4skypeから。webで調べてでてくる解説は過去のバージョンで、パッケージ名からして違う。gemについてたREADMEの解説も古いのでソースを読んで使い方を調べた
require 'rubygems' require 'skype' Skype.init('test_app')
ArgumentErrorが出る。linux/mac/windowsで使えるようにしているところの、os/linux.rbのinitializeで引数が足りないというエラー。
で、skype/os/linux.rbを修正。initialize methodのsuperにapp_nameを渡す。
これでSkype.initできた。
でもSkype::Message.createとかSkype::Call.createとか試したけど動かなかった。エラーの内容は忘れた。
SkypeRを試す。READMEにライブラリとしての使い方が書いていなくて、iskype.rbの使い方だけが書いてある。これは対話式にSkype APIのコマンドが試せる物で、起動したらuninitialize constant SKypeR::REPL::FileUtilsとのことだった。
しょうがないのでソースを読んだ。
s = SkypeR::Service::Application.new('test_app') cmd = SkypeR::Service::CommandMessage('SEARCH FRIENDS') s.invoke(cmd) s.invoke SkypeR::Service::CommandMessage('CALL shokaishokai') s.invoke SkypeR::Service::CommandMessage('MESSAGE shokaishokai hellohello')
search frinedsとcallはできる。MESSAGEとか、SEARCH ACTIVECHATSとかSEARCH CHATSを使うとParse Errorになる。テキストメッセージを扱う系が動かない。