ストレージサービスのBoxがOpenBoxというちょっとおもしろいことをしてるのをTumblrのポストJunk Innで知りました。OpenBoxは、Boxにアップロードしたファイルをウェブ上のほかのBoxとぜんぜん関係のないサービスでかんたんに使えるようにするためのしくみです。

ちょうどWindowsでファイルを右クリックして、使いたいアプリケーションを選ぶと、選んだアプリケーションが起動してそのファイルを開いてくれるかんじで、えらんだウェブのサービスがそのファイルを開いてくれる、イメージで使えます。
ここまではまあなんかあったりもしそうですが、すごいのはBoxとぜんぜん関係ないサービスでそのファイルを編集したりしたあと、もう一度Boxに書き戻したりできるところです。

で、どうなってるのかとちょっと考えてみるわけですが、じつは仕組みは単純で、編集する画像ファイルのURLをパラメータでPicnikに渡して編集しているだけなのです。編集したやつをBoxに戻すのはどうやってるの?というのが最大の謎でしたが、それはPicnik APIにExportボタンを押したあとにリダイレクト先を指定するインターフェイスがあるのです。そのURLをBoxにしておくことで、ユーザが画像を編集してExportしたあとでBoxにリダイレクトしてもらうことで編集した画像のURLをPicnikに教えてもらってそれをBoxが保存しているみたいです。つまり、Box以外のサービスを起動してファイルになにか加工をしたあとそれをBoxに保存できるかどうかは起動するサービスの持っているインターフェイス次第で、Picnikはそういう仕組みがあるので編集後の画像をBoxに保存できる、というわけなのでした。
技術的にはわかってしまうと、なーんだ、というかんじですが、見せかたがちょっと違うだけでいままでとはぜんぜん違った繋がりかたをしている印象を与えるのでした。
Boxとぜんぜん関係のないPicnikで画像を編集したあとちゃんとBoxに書き戻せるところはPicnikのAPIがよく考えられているおかげで、それを使ってアプリケーションを起動して保存している感じにできるのに気がついたOpenBoxのひとのアイディア!でもってBoxの機能は実現されています。
で、これの作り方が理解しがたいのでid:asannouさんの指導のもとBoxにアップロードしたファイルをfavicon2dotsに送り込むOpenBoxのサービスを作ってみる手順を懇切丁寧にご紹介します。
ちなみに作ったサービスはほかのひとも自分のメニューに追加して使うことができます。よかったら追加してみてください。
OpenBox Service: favicon2dots

この下にもいくつか項目がありますが、とりあえず上のキャプチャにある部分だけ埋めれば大丈夫。
Service nameのところは文字通りサービスの名前になります。ファイルを選んだときに出てくるメニューの名前や、サービスの紹介が表示されるpermalinkの一部に使われます。Service description, Support email, Website URLもてきとうに書いてあげてください。
ボタンを押すと今度はサービスの中身、利用しようとしているサービスにどういうデータを送るかを設定する画面が出てきます。

ここでサービスに渡す細かいパラメータの設定を行います。ここが重要!この部分がOpenBoxのすべてです。
上から順番にさらっと説明しますと、Prompt parametersはサービスを開こうとしたとき、もし必要ならユーザにパラメータを入力してもらうことができます。今回はユーザになにか入れてもらったりはしないので空白のままです。
Callback configurationでは、サービスの呼び出しかたを指定します。ここ、わかってないんですがUser experienceはpopupを選びます。server-sideは、たぶんブラウザ上では何かが開いたりすることなく、Boxのサーバと利用しようとしているサーバだけで処理が完結して、人間は何もしなくていいという場合に選ぶんだと思います(予測なので違ってたらごめんなさい)。
Methodは、利用しようとするサービスにパラメータを渡す方法です。今回はふつうにHTMLでフォームをsubmitするfavicon2dotsを利用しているのでRESTを選びます。
Initial Callback URLには、呼び出すサービスのURLを指定します。favicon2dotsのHTMLを覗くとhttp://favicon2dots.com/createにPOSTするようになっているのがわかるのでhttp://favicon2dots.com/createを指定します。
Client Callback URLはよくわかりません。URL to the popupと書かれていますがなんでしょうねー。とりあえずなくていけたので空白にしています。
最後にサービスに渡すパラメータを指定します。MethodはGet, Post, Fileのみっつの中から選べます。GetとPostはそのままですがFileは何かというと、利用しようとしているサービスに対して選んだファイルの中身自体をBoxにアップロードしてほしいときに使います。今回のfavicon2dotsは変換したい画像のURLを指定するのでPostにしていますが、ファイルをアップロードして変換してもらうようなサービスのときにはFileを選ぶわけです。
Parameter nameはinputタグのnameに入っているやつですね。favicon2dotsのHTMLを覗くとuriになっているのでuriを入力します。
Parameter valueのところはみためふつうのテキストボックスなのですが、クリックすると選択肢が出てくるようになっています。Box側で管理されている値、たとえば画像のURLだったり、ページのURLだったりをパラメータとして渡したいときにはここから選べばいいです。

で、ボタンを押したて保存したらOpenBoxのサービス完成です。

そういうときはいったんInitial Callback URLを自分が管理しているサーバに変更して、どんなリクエストが送られてきているかを確認して、思い通りのパラメータが送られてくるように設定を変えてからほんものの利用したいサービスのURLに変更するといいでしょう。今回favicon2dotsをOpenBoxを繋げていて、なぜかBox上にあるJPEGの画像だとfavicon2dotsがBoxのfaviconをdotsに変換するという現象に悩まされたため、そうして送られているリクエストを調べました。
起動するサービスが、そのサービス上で生成したURLをパラメータにして指定したURLにリダイレクトする機能を備えている場合、あたかもBoxにあるファイルをウェブ上のサービスで開いてBoxに保存しているかのような操作感が実現されています。サービス上で生成したURLをパラメータにして特定のURLにリダイレクトする機能は、渡されたあるURLを加工してべつのURLにして出す仕組みとしてみることもできます。
現在ほとんどのサービスは、受け取ったデータを加工した結果をブラウザ上で人間に対して視覚的に返していますが、加工したデータをURLというキカイに理解できるカタチで返すことで全く関係のないサービス同士をゆるくくっつけるためのインターフェイスになるというところはおもしろいです。
トラックバック元エントリにこのエントリへのリンクがない場合はトラックバックを受け付けません。
http://labs.gmo.jp/mt/mt-tb.cgi/183
comments