arc の日記

はてなダイアリーから引っ越してきました。さらに新しい記事は https://junkato.jp/ja/blog/ で書いています。

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を使うにあたって工夫した点がいくつかあります。以降、ソースコードについての解説が続きます。

続きを読む