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へのアクセスを許可するかどうかを問うメッセージがでること。それを許可しないと先に進まないか、タイムアウトされてしまう。
簡単に解説……
WindowsにSkypeがインストールされた環境であれば、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
- コンタクトリスト上での表示名を取得できる。ただコンタクトに登録されていない相手だったら、何も表示されない。
最後に
同じこと繰り返すが、WindowsにSkypeがインストールされた環境であれば、それだけでSkype4COMを利用することが可能だ。Skypeに対しての操作はかなりのことができる。これを用いてアプリやサービスをを作ることは特に考えていないけど、ちょっとした操作ができることは覚えておいていいかな、という程度。なお、Skype Public APIの公式サイトから、Skype4COMのドキュメントをダウンロードできるけど、ヘルプファイル(Skype4COM.chm)のどのページを見ても、「ページを表示できません」で開けなかった。ただ、この程度のことであれば、目次を見ながらでも分かると思う。