やっぱりGoogleカレンダーと連携する事にした〜スケジュール管理ソフトをS!アプリで作ってみよう(その27)

loglyカレンダーと連携するためのHTTPのプロトコルの調査を終えた。

SocketConnectionクラスを使用して試しにコードを書いて、サーバにアップロードをしてみたら、エラーの表示が... 調べてみたら、SocketConnectionは使ってもよい外部通信系APIになかった。(もっと目立つところに書いておいてよ)

こうなったら仕方がないので、自分でGoogleカレンダーのプロキシになるサーバを立てて、S!アプリは自分のサーバとHTTPで通信する事にした。サーバのCGIがS!アプリの代わりにHTTPSGoogleと通信する。こんなやり方だと、アプリは公開できるような代物にはならなさそう...

プロキシになるためのCGIのコードは以下の通り。CGIGaucheで書いてみる事にした。GaucheにはSSL通信のためのライブラリがないので、StunnelGoogleに接続するようにしている。このCGIのURLにGoogleのサービスにログインするのと同じ方法で要求を送信すればよい。(EmailとPasswd以外は無視される仕様になっているが)


#!/usr/local/bin/gosh

(use www.cgi)
(use rfc.http)

(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