やっぱりGoogleカレンダーと連携する事にした〜スケジュール管理ソフトをS!アプリで作ってみよう(その27)
loglyカレンダーと連携するためのHTTPのプロトコルの調査を終えた。
SocketConnectionクラスを使用して試しにコードを書いて、サーバにアップロードをしてみたら、エラーの表示が... 調べてみたら、SocketConnectionは使ってもよい外部通信系APIになかった。(もっと目立つところに書いておいてよ)
こうなったら仕方がないので、自分でGoogleカレンダーのプロキシになるサーバを立てて、S!アプリは自分のサーバとHTTPで通信する事にした。サーバのCGIがS!アプリの代わりにHTTPSでGoogleと通信する。こんなやり方だと、アプリは公開できるような代物にはならなさそう...
プロキシになるためのCGIのコードは以下の通り。CGIをGaucheで書いてみる事にした。GaucheにはSSL通信のためのライブラリがないので、StunnelでGoogleに接続するようにしている。このCGIのURLにGoogleのサービスにログインするのと同じ方法で要求を送信すればよい。(EmailとPasswd以外は無視される仕様になっているが)
#!/usr/local/bin/gosh(cgi-main
(lambda (params)
(let ((email (cgi-get-parameter "Email" params))
(passwd (cgi-get-parameter "Passwd" params)))
(receive (status header entry)
(http-post "localhost:9000"
"/accounts/ClientLogin"
(string-append "Email=" email "&Passwd=" passwd
"&source=jp.dip.ettem-scheduler-1&service=cl")
:Content-type "application/x-www-form-urlencoded")
(list
(cgi-header :status status :content-type "text/html")
entry)))))
Stunnelの設定内容は以下の通り。
client=yes
[gcal]
accept=localhost:9000
connect=www.google.com:443