Skypeチャットの新着発言をTwitterのDM(iPadのBoxcar)で読む
僕は、手元のマシンでSkypeを常時起動しているわけではないんですが、チームワークの会議室代わりにSkypeチャットを使っており、Skypeチャットで発言があったらすぐに知りたいと常々思っていました。そんな折、チームのid:takashyxが便利そうなスクリプトを書いていたので、同じようなことをしてみました。
具体的には、Skypeのチャットルームで誰かが発言をすると、Twitterの自分のアカウント宛てにDirect Message(DM)が送られてきます。そして、Twitterの設定でDMが送られてくるとPC宛にメールで通知され、Gmailのフィルタで携帯に転送されて届くようになっています。さらに、DMはBoxcarというサービスで監視されており、iPadにプッシュ通知が送られてきます。
このプログラムを動かしてからは、携帯かiPadが傍にあるか、Twitterを見ているときにはSkypeの新着発言にすぐ気付けるようになりました。
対象
なお、僕はMac OSX Snow Leopard (x86)とWindows (x64)で動作確認しました。この記事では主にMac OSXでサービスを動作させる手順について説明します。
準備
Twitterの連携アプリ登録
Twitterの連携アプリ登録を行ってOAuthのConsumer key/secretを取得します。
Skype.frameworkのコピー
Skype API(Skype4Java)を使うために必要です。
mashiro:~ arc$ sudo cp -Rf /Applications/Skype.app/Contents/Frameworks/Skype.framework/ /Library/Frameworks/
Skype2witterのダウンロード
http://digitalmuseum.jp/etc/hatena/arc_at_dmz/diary/20100724-Skype2witter.tar.gzをダウンロードして適当なディレクトリに展開します。
mashiro:~ arc$ wget http://digitalmuseum.jp/etc/hatena/arc_at_dmz/diary/20100724-Skype2witter.tar.gz mashiro:~ arc$ tar -zxvf 20100724-Skype2witter.tar.gz x Skype2witter/ x Skype2witter/bin/ x Skype2witter/lib/ x Skype2witter/make.sh x Skype2witter/oauth.sh x Skype2witter/skype2witter.sh x Skype2witter/src/ x Skype2witter/src/com/ x Skype2witter/src/Skype2witter.java x Skype2witter/src/TwitterOAuth.java x Skype2witter/src/com/skype/ x Skype2witter/src/com/skype/ChatMessageFixed.java x Skype2witter/src/com/skype/ChatMessageMonitor.java x Skype2witter/lib/skype4java/ x Skype2witter/lib/twitter4j/ x Skype2witter/lib/twitter4j/LICENSE.txt x Skype2witter/lib/twitter4j/twitter4j-core-2.1.3.jar x Skype2witter/lib/skype4java/LICENSE.txt x Skype2witter/lib/skype4java/skype.jar x Skype2witter/bin/com/ x Skype2witter/bin/Skype2witter$1.class x Skype2witter/bin/Skype2witter.class x Skype2witter/bin/TwitterOAuth.class x Skype2witter/bin/com/skype/ x Skype2witter/bin/com/skype/ChatMessageFixed$LeaveReason.class x Skype2witter/bin/com/skype/ChatMessageFixed$Status.class x Skype2witter/bin/com/skype/ChatMessageFixed$Type.class x Skype2witter/bin/com/skype/ChatMessageFixed.class x Skype2witter/bin/com/skype/ChatMessageMonitor$Listener.class x Skype2witter/bin/com/skype/ChatMessageMonitor.class
OAuthのAccess token取得
先ほど取得したConsumer key/secretを引数にして、コンソールでシェルスクリプト oauth.sh を起動します。
提示されたURLをブラウザで開き、自分のアカウントへのアクセスを「許可」すると、PINコードが表示されます。それをコンソールに入力すると、Access tokenが表示されます。この情報を使ってSkypeのチャットメッセージをTwitterのDMとして送信します。
mashiro:~ arc$ cd Skype2witter/ mashiro:Skype2witter arc$ ./oauth.sh consumer_key consumer_secret [Sat Jul 24 16:28:59 JST 2010]Will use class twitter4j.internal.logging.StdOutLoggerFactory as logging factory. [Sat Jul 24 16:28:59 JST 2010]Will use twitter4j.internal.http.HttpClientImpl as HttpClient implementation. Open the following URL and grant access to your account: https://twitter.com/oauth/authorize?oauth_token=hogehoge Enter the PIN(if aviailable) or just hit enter. [PIN]:1111111 token: foobar tokenSecret: foobarsecret
Skype2witterの起動
これまでに集めた情報を引数に与えてSkype2witterを起動します。 & を付けてバックグラウンドジョブとして起動したのち、disownでデーモンプロセス化するのがおすすめです。こうすると、シェルからログアウトしてもずっとプログラムが動いてくれます。
mashiro:Skype2witter arc$ ./skype2witter.sh consumer_key consumer_secret foobar foobarsecret & [1] 50365 mashiro:Skype2witter arc$ [Sat Jul 24 16:41:25 JST 2010]Will use class twitter4j.internal.logging.StdOutLoggerFactory as logging factory. [Sat Jul 24 16:41:25 JST 2010]Will use twitter4j.internal.http.HttpClientImpl as HttpClient implementation. CURRENTUSERHANDLE arc_at_dmz USERSTATUS ONLINE CONNSTATUS ONLINE SKYPEVERSION 2.8.0.851 mashiro:Skype2witter arc$ disown %1
実際に発言があるとこのようなログが出ます。
MESSAGE 387 STATUS RECEIVED MESSAGE 387 PARTNER_DISPNAME digitalmuseum MESSAGE 387 BODY hello, world! Skypeで digitalmuseum が発言しました: hello, world!
また、携帯には次のようなメールが送られてきました。
Skypeで digitalmuseum が発言しました: hello, world!
arc@dmz / arcatdmz
- -
このユーザーをフォローしたい場合はこちらまで:http://twitter.jp/arcatdmz
(以下略)
なお、Mac OSXでSkype4Javaを使うにあたって工夫した点がいくつかあります。以降、ソースコードについての解説が続きます。