im.kayac.comを知り、coderepos にコミットした
数日前から、デブサミのビデオがニコ動に色々上がっていた。何個か見たけど、とぎれとぎれだったりしてよく理解出来なかった。今日は、そんなデブサミで使用されたパワポらしきものが、上がっていたのでボチボチみてたらotsuneさんの資料の中にim.kayac.comの事がのっていた。
im.kayac.com は今まで知らなくて、この資料で初めて知った。
まず試すためにアカウント(a2c)を作った。んで、そのあとにGTalk宛にIMを送るように設定した。GMailからだと新規アカウントにメッセージが送れなかったので、iChatを使って、アカウントを追加した。認証用のパスコードを送ったら一瞬で承認された。あとは、kayacのAPIに何か投げれば返ってくるはず
仕組みはよくわからないけど、
POST /api/post/username HTTP/1.0 Host: im.kayac.com Content-Type: application/x-www-form-urlencoded Content-Length: 22 message=Hello%20World!
こうするだけでいいらしい。via:http://im.kayac.com/#docs
だがしかし、こうするだけでもよくわからないので、ターミナルで試してみた。
$ telnet im.kayac.com 80 Trying 210.158.205.232... Connected to im.kayac.com. Escape character is '^]'. POST /api/post/a2c HTTP/1.0 Host: im.kayac.com Content-Type: application/x-www-form-urlencoded Content-Length: 22 message=Hello%20World!
おぉー!来たぁ!!
って感じで、メッセージが流れてきた。ひとまず成功。
これをPythonで組めば、自分のいろんなツールに組み込んでIMでお知らせが簡単に出来るハズ。
やり方はよくわからんが、POSTメソッドで投げるだけポイので、作ってみる。
import urllib import os,sys base_url = "http://im.kayac.com/api/post/" message = {"message":"ここにメッセージ 入れてみる"} params = urllib.urlencode( message ) d = urllib.urlopen(base_url+"a2c", params) print d
動くぞ、コレ。ここまで作ってみて、codereposにあげたくなってきた。
こんなスクリプトあげたって誰も喜ばないけど、自分みたいな人がいたら、きっと参考になるかもしれないと思って。あげると決意した。が、こっからが結構大変だった。
そもそも、usernameが直接書いてあるし、他のファイルからimportして使うにはどうするの?なにかやらなきゃ行けない事があるのかな?他にも、importせずに直接叩いても動いてほしいしパスワード付きの時はどう処理するのさ?というような感じで、自分で使えればいいっていう状態と、最低のレベルだとしても、公開して誰かに使ってもらえるような状態っていうは、天と地ほどの差がある。
とりあえづ、クラスを使う事にした。インスタンスにIDとパスワードを持たせる。その後送りたい時に、sendメソッドでメッセージをバシバシ送るようにすればいいのかなぁと思いながら作る。認証方式は、「なし」と「パスワード」と「秘密鍵」とあるけど、秘密鍵はめんどくさそうなのでパス。
例外処理も全く入れてない。だめだった時に何か返したいが、im.kayac.comからのレスポンス文字列をそのままハッシュに理解するにはどうするの?JavaScriptでいうところのeval()みたいな事をしたいけど、やり方がわからずに断念。
結局出来たスクリプトが
#! /usr/bin/env python # coding:utf-8 """ imkayac.py This script send message to im.kayac.com . ver 0.1 Created by atusi on 2008-02-17. Copyright (c) 2008 __atusi nakamura__. All rights reserved. ## how to use ## from imkayac import * a = KayaTalk("yourID", "yourPass") a.send("your message") ################ """ import urllib class KayaTalk(object): """docstring for IMer""" def __init__(self, usrname, password=None): #super(IMer, self).__init__() self.usrname = usrname self.password = password self.message = {} self.base_url = "http://im.kayac.com/api/post/" def send(self, message): """docstring for sendData""" if (self.password != None): self.message["password"] = self.password self.message["message"] = message self.params = urllib.urlencode( self.message ) d = urllib.urlopen(self.base_url+self.usrname, self.params) #x = d.readline() #print x d.close if __name__ == '__main__': import sys print len(sys.argv) if len(sys.argv) < 3: print >> sys.stderr, "Usage: username [password] message" sys.exit(1) else: if (len(sys.argv)==4): a = KayaTalk(sys.argv[1], sys.argv[2]) a.send("%s"%(sys.argv[3])) else: a = KayaTalk(sys.argv[1]) a.send("%s"%(sys.argv[2]))
とりあえづ、直接引数渡しても、他のPythonファイルからimportしても使えるようになった。ちょっと感動ですよ。そんで、どきどきしながら、codereposへのコミットの仕方を調べる。
ここで、気づいたのは既に作っている人がいるかもしれない。って思ったけど、codereposにはまだpythonでは上がってなかった。
検索したけど、「正しいcodereposの使い方」的なページは見つけられなかったのでココに乗っていた
Commit message rules ¶ svn ci -m "lang/LanguageName/BigProjectName: Commit message." svn ci -m "lang/LanguageName/misc/ScriptName: Commit message." svn ci -m "dotfiles/SoftwareName/Username-Filename: Commit message."
このルールに従うことにした。
上げるところはroot/lang/python/misc に上げる事にした。
MacBookAirでまだ、チェックアウトしてなかったので root/lang/python 配下をとりあえづcoした。いろんなところにsvkの使い方的な事が書いてるけど、svkは良くわかんないのでパスした。
lang/pythonはそんなに重くないので一瞬で落ちてきた。miscディレクトリにimkayac.pyをコピっておもむろに、svn add imkayac.py コワー。ローカルの作業だけどドッキドキです。人様のリポジトリにコミットするのは、人生初経験になります。って、まだコミットしてないけど・・・
ルールは、コミット時のコメントなのかなぁ?とか思いながら、上記ルールに従って(従えてると思ってるけど、間違っているかもしれない)
% svn add imkayac.py A imkayac.py % svn ci -m "lang/python/misc/imkayac.py: send message im.kayac.com." Username: a2c Password for 'a2c': Adding misc/imkayac.py Transmitting file data . Committed revision 6833.
若干整形したけど、こんな感じで、r6833無事に上がったですよぉ!
これであってるのかな?すごい不安です。そのあとアップデートかけたけど、特に問題な感じなので大丈夫だと思うけど自信ないです。
退屈な週末が、かなりワクドキな週末になりました。今回の経験で、いつ死んでも大丈夫なようにコードは書いておいた方がいいなぁと思ったですよ。自分だけ読めればいいとか、そんな小さな事を言っていたらいつまでたっても甘えコードしかかけない気がした週末でした。
来月のPyDevで、テストファーストのコースが有るらしいのでそれはぜひ行こう。さらに、なぜか自腹でシカゴのPyConにも行く事にしたので、そこでもいろんなコードを見たり聞いたりしてきたい。