Skype4COMでチャット参加メンバーを調べる

業務でSkypeを使用することがある。ある問題に関わる人間が次々と加わり、そのチャットへの参加者がどんどん増えることになり、しまいには40人近くが名を連ねるようになった。あるとき、誰にメッセージを送っているかを明確にするために、そのメンバーを一覧化する必要がでてきたが、ユーザ名をリストにして抽出するようなことがWindows版のSkypeではできないみたいだ。
Skype4COMとVBScriptを使って、メンバー一覧を取り出してみることにした。

' Skype オブジェクト
Set skype = CreateObject("Skype4COM.Skype")

' Chatコレクションを順次取得
For Each chat In skype.Chats
    WScript.Echo chat.Name
    If Len(Trim(chat.Topic)) > 0 Then WScript.Echo "Topic:" & chat.Topic
    For Each user In chat.Members
        WScript.Echo vbTab & user.Handle & _
            "/" & user.FullName
    Next
    WScript.Echo ""
Next

Set chat = Nothing
Set user = Nothing
Set skype = Nothing

実行方法

上記のコードを拡張子・vbsで保存する。標準出力するだけなので、実行する場合はcscriptを使う。コマンドプロンプトを立ち上げ次のコマンドで実行する。

DOS> cscript chatmembers.vbs //Nologo

すると、チャットの名前とそれに関連付けられたユーザ名が出力される。それなりの頻度でSkypeしていればチャットの履歴のようなものが出力されることになるため、情報量が多くなるかも。
次のように実行することで、標準出力ではなく「>」の後ろのファイルへ出力させることができる。

DOS> cscript chatmembers.vbs //Nologo >chatmembers_result.txt

実行時の注意としては、Skype側からcscriptによるSkypeへのアクセスを許可するかどうかを問うメッセージがでること。それを許可しないと先に進まないか、タイムアウトされてしまう。

簡単に解説……

WindowsSkypeがインストールされた環境であれば、Skyp4COMは使えるみたいだ。
次のコードで常駐しているSkypeを扱えるようにする。

' Skype オブジェクト
Set skype = CreateObject("Skype4COM.Skype")

で、今回ほしいのはチャットに参加しているメンバーなので、「skype.Chats」でChatコレクションを取得する。ここにあるのはチャットの履歴のようなものだと思う。For Each〜Nextのなかで全てのChatオブジェクトに対して処理を行っている。

' Chatコレクションを順次取得
For Each chat In skype.Chats
    '処理を書く
Next

Chatオブジェクトから取得できる情報にはいくつかあるが、ここでは以下のプロパティを参照している。

Name
「#{Skype ID 1}/${Skype ID 2};{ランダムっぽい文字列}」が返される。二人で話す分には自分と相手のSkype IDがでてくる。グループチャットのようになっていれば、「#{Skype ID}/${ランダムっぽい文字列}」と出力される。コンタクト上での表示名ではないから、これを見ても分かりにくいことが多いかも
Topic
そのチャットにつけられている名前を返す。二人でやりとりするときにはあまりつけないと思う
Members コレクション
今回、一番必要だったのはこれ。そのチャットの参加者・Userオブジェクトをコレクションで返す

MembersをFor Each〜Nextで回してやれば、参加者の情報が得られることになる。次のような感じで。

For Each user In chat.Members
    'Userオブジェクトへの処理を書く
Next

Userオブジェクトからは次のプロパティを参照して、参加者の情報を特定するようにした。

Handle
Skype IDを取得する
FullName
コンタクトリスト上での表示名を取得できる。ただコンタクトに登録されていない相手だったら、何も表示されない。

最後に

同じこと繰り返すが、WindowsSkypeがインストールされた環境であれば、それだけでSkype4COMを利用することが可能だ。Skypeに対しての操作はかなりのことができる。これを用いてアプリやサービスをを作ることは特に考えていないけど、ちょっとした操作ができることは覚えておいていいかな、という程度。なお、Skype Public APIの公式サイトから、Skype4COMのドキュメントをダウンロードできるけど、ヘルプファイル(Skype4COM.chm)のどのページを見ても、「ページを表示できません」で開けなかった。ただ、この程度のことであれば、目次を見ながらでも分かると思う。