出典 golang.org
RICOH THETA API v2 をGo言語で叩いてみる
Go言語にちょっと興味が湧いてきたので理解するために何か実装して見ようと思って、ちょうどタイミング的にRICOH THETA API v2の公開が重なったのでではGo言語のAPIクライアントを作ろうということにしました。
作ったもの
-
https://github.com/toshi3221/theta_v2
- Go言語のRICOH THETA API v2クライアント
-
https://github.com/toshi3221/pazu
- RICOH THETA API v2 WebUI
- クライアントだけだと全く動かした感じにならないのでちょっとだけ。。
- 2015/12/15現在撮影・サムネイル付きファイル一覧(最新10個)のみ
THETAを開発するとき無線LAN USBアダプターは必需アイテム
THETAを使ったアプリの開発すると地味に面倒なことに気づきます。それはTHETAに接続しながらネットに繋げられないので調べ物が出来ないのです。その問題を解消するために無線LAN USBアダプターを挿すことでネットを見ながら接続もキープできるのでオススメです。
私は主にMBPで開発してますが、Macに対応する無線アダプタはちょっと少ないですが、PLANEXのものであればMacも対応してることも多いようです。PLANEXの刀を愛用してます。かっ飛びです。
APIv2クライアントを試してみる
Go言語自体は既にインストールしていることを前提とします。まずAPIv2クライアントを取り込みます。
go get github.com/toshi3221/theta_v2
クライアントライブラリ内にTHETA Sを操作可能な各種サンプルを用意しているのでここでは撮影を行うサンプル(take_picture.go)を実行してみます。THETA SをWi-Fi接続後、以下コマンドを実行します:
cd $GOPATH/src/github.com/toshi3221/theta_v2/examples
go run take_picture.go
サンプルではセッションを開始し、撮影を行ってファイルが保存されるまで待つようにしています。
APIv2 WebUIを試してみる
Go言語のWebフレームワークであるRevelを使ってみました。高速で動作してAPIサーバー等に相性が良さそうです。Revelをインストールします:
go get github.com/revel/revel
go get github.com/revel/cmd/revel
revelコマンドは$GOPATH/binフォルダにインストールされるのでPATHを通しておいて下さい。Revelのインストールが終了したら、APIv2 WebUIをインストールしてビルドしてサーバーを起動します:
go get github.com/toshi3221/pazu
revel build github.com/toshi3221/pazu pazu
cd pazu
./run.sh
あとはTHETA Sを接続しておいて http://localhost:9000/ にアクセスすると、撮影・一覧表示ができました。
THETA API v2は複数同時HTTP接続が可能だが3つまで
API v1はコマンドを複数同時に受け付けることは出来ませんでしたが、API v2からは複数同時に受け付けが可能となりました。これにより、CheckForUpdates / Stateをコマンド等とは非同期にリクエストを行って監視する等応用が可能となります。
しかしながら、無制限に複数同時接続が出来るというわけでは無く、同時3接続を超えるとリクエストを受け付けずエラーで弾かれるようです。
Go言語にはチャネルという並列処理時に同期する仕組みがあり、バッファリングを行ったチャネルを利用することでセマフォのように使うことが出来ます。この仕組みを利用してtheta_v2ではClientメソッドを同時に3つまで処理可能とし、それを超えるとチャネルによってブロックすることで制御しています:
var clientSemaphore = make(chan int, 3) // バッファサイズ3のint型チャネル。値は使わないので型や格納する値は何でも良い
func (client *Client) Info() (info Info, error error) {
clientSemaphore <- 1 // チャネルに格納。同時格納が3を超えるとブロックする
defer func() { <-clientSemaphore }() // メソッドを抜けるときにチャネルから値を取り出す
...
}
今後の展望
APIv2 WebUIが今のところ動いたーってことしか本当に出来てないので、ファイルの取り込み、ファイル各種操作程度出来るようになれば普通にノートPCで使えるようになるかなと思ってます。それくらいまではやろうかなと。RICOH THETAは普通のユーザーも開発者も楽しいので是非みんなで盛り上げていきましょう!