3D mode!

Entries in 2008/04

Windows上のSkypeをRubyから操作する

Skype って API があったんですねぃ.IRC や IM (Jabber) と違って,ボットを作ったりできないものだと思っていましたが,ただボクが実例を見たことがなかっただけでした.Ruby4Skype を使うと Ruby から簡単に操作できました.ただしこれは Windows 上の Skype しか操作できないようです.

社内のエンジニアチームでは Skype のグループチャットを常用することになったので,何かあったらそこに通知する Skype ボットを作りました.用意するものは「自分用の Skype アカウント」「ボット用のアカウント」「Windows 機1台」です.もちろん Ruby の実行環境も必要です.

ボット用アカウントから自分の Skype アカウントに話しかけるシンプルなプログラムはこんな感じ.Skype を起動してボット用アカウントでサインインした状態で実行する.

require 'rubygems'
require 'skypeapi'

SkypeAPI.init
SkypeAPI.attachWait

SkypeAPI.searchFriends.each do |user|
  if user.getHandle == 'june29'
    chat = SkypeAPI::Chat.create(user)
    SkypeAPI::ChatMessage.create(chat, "Hello, World!")
  end
end

社内チャットのように,決まった場所に通知する場合はチャットをブックマークしておくとアクセスしやすくなります.

chat = SkypeAPI.searchBookMarkedChats[0]

最後に,エコーボットのサンプルです.チャットメッセージの受信時に,そのメッセージの内容をそのまま返す処理をします.

# chat を適当に用意して

SkypeAPI::ChatMessage.setNotify :Status, 'RECEIVED' do |chatmessage|
  SkypeAPI::ChatMessage.create(chat, chatmessage.getBody)
end

loop do
  SkypeAPI.polling
  sleep 0.123
end

受信したメッセージの内容に応じて発言内容を変える処理を実装すれば,簡単な検索ボットなんかがすぐに作れちゃいますね.色々と遊んでみよう!

Suicaの履歴で遊ぶ

上京して働き始めてから3週間ほどが経ちました.思っていたほどの気持ちの変化もなく,これまで通りのノリで楽しく暮らしています.それでも,環境の変化はボクにたくさんのものを与えてくれますね.嬉しいことです.ようやく生活も落ち着いてきたので,少しずつブログの更新頻度も高めていきたいです.

会社に属するようになって改めて,「手続き的なものは苦手だなぁ」と感じます.そんな中でも,日々の交通費の申請がとても面倒だったので,PaSoRi を使って Suica の履歴を取得し,半自動化を試みました.

SONY RC-S320 非接触ICカードリーダ/ライタ PaSoRi 「パソリ」 SONY RC-S320 非接触ICカードリーダ/ライタ PaSoRi 「パソリ」

ソニー
売り上げランキング : 148

Amazonで詳しく見る by G-Tools

Rails で社内用 Web アプリ!

こんなアプリを作ってみました.

PSReadr
Uploaded with plasq‘s Skitch!

誰がいつどの駅からどの駅まで移動していくら掛かったのか, Suica の履歴から分かります.「この駅は誰々がよく利用している」だとか「この日はどこどこに行ったよねー」だとか,そんな会話が生まれるといいですね.

Suica の履歴

Leopard で Ruby から PaSoRi を通して Suica のデータを扱えるようにするため,以下のリンク先を手順を踏みました.

Leopard 上の Xcode を使う場合は「有効なアーキテクチャ」の項目から「ppc」を除いてやるとビルドが上手くいくようです.

駅のデータはこちらのものを利用させていただきました.Excel 形式のものを CSV に変換してプログラムに読ませましたが,重複行があったり,昔と今で駅の名前が変わっていて同じコードが振られているものがあったりするので,多少の整形が必要でした.

ここまでの下準備が最も大変だったわけですが,ようやく Ruby から Suica のデータを読めたときはテンションが上がりました!でもでも,Suica には最新20件の利用履歴しか保存されておらず,日付のデータは取れても時刻までは取れないし,ちょっと残念です.もっと細かいデータまで扱えたら楽しいのになぁ.

まとめ

会社の手続きのような面倒なものも積極的に楽しくしていきたい!デバイスを扱うプログラミングは楽しい!

追記

ブックマークコメントにお返事します.

ところで買い物履歴も吸い出すんですか?

Quotation from はてなブックマーク – kyo_juのブックマーク / 2008年05月03日

Suica は,買い物履歴も含めて20件まで保持していて,PaSoRi から読み出すタイミングでは買い物履歴も取得します.今回作ったアプリでは,その後の処理で買い物履歴を除いて,電車利用の履歴だけを利用しています.