capture.tumblr.jsをgelato対応に
2008-02-29


とりあえずやってみました

ブラウザでキャプチャしてアップロードするJSActionsスクリプトシリーズのtumblrにアップロードするバージョンです。
capture.tumblr.js ブラウザでキャプチャしてtumblrにpostするJSActionsスクリプト v.0.0.1a ≪ ZeroMemory
という、激しく便利なJSActionスクリプトをgelatoに対応させてみた。
禺画像]
図はtumblrのダッシュボードをキャプチャしてgelatoに放り込んだものをさらにgelatoにキャプチャして、それをキャプチャしてtumblrに放り込んだもの。何いってんだかわかんなくなってきた。

どのあたりをどう変えるか

さて、一所懸命ソースを見てみましたよ。

URLの体系が違う

まず、URLの生成方法がまったく違う。capture.tumblrはTumblr write APIを使っているが、gelatoはそんな機能はないのでadmin/index.phpに直接POSTする必要がある。

このあたりを担当しているのが、269行目からの「Tumblr」オブジェクトらしい。このオブジェクトはベースURLになる「endpoint」プロパティとリクエストを実行する「post」メソッドが実装されているが、どちらも変更する必要がある。

POSTする内容が違う

そして当然POSTする内容が違うので、このあたりを扱う部分にも変更を加える必要がある。これは「ImageSaver」オブジェクト(296行目から)の「post」メソッド(451行目から)だ。

gelatoでphotoをPOSTする場合は

と、イメージストリーム本体の「photo」を送る必要がある。

ちょっとだけ修正してやる必要もある

イメージストリームの流し込み方などはcapture.tumblr.jsそのままになるので、Tumblr.post()に渡すオブジェクトを上記のように整えてやればよいのだが、tumblrでは必要としないfilenameを与えてやる必要もある。

08.03.01付けの0.0.1bで修正されたようです。HTTP.Request.prototype.create_streamへの修正作業は不要になりました。(08.03.02追記)

この「filename」を与えてやるにあたり、もう一箇所修正が出てくる。マルチパートのストリームを生成している、HTTP.Requestクラスのcreate_streamメソッドだ。

173行目でfilenameが与えられていた場合にそれをリクエストに追加するのだが、ここでパラメータオブジェクト名を除いた変数でアクセスしているため、これを修正しないと例外になる。tumblrの場合はこのロジックを通らないので見つからなかったバグなのだろう。

そんなわけでこんなやり方

こんな感じで手を加える部分がちょっと散っているので、

といった感じで実装してみた。

修正コードのみですが

こんな感じで。

Tumblrオブジェクトの再定義

Tumblr = {
  // set your gelato admin page.
  endpoint : "http://localhost/gelato/admin/index.php",
  post : function(params, opts) {
    opts.multipart = true;
    return new HTTP.Request(this.endpoint, opts).post(params);
  }
}

opts.multipartへの値の割り当ては、オリジナルではparams.typeの内容をチェックしていたのだが、どうせマルチパート確定なので直接trueをセットしている。あとはURLはendpointに何も手を加える必要がないのでこんな感じになった。

ImageSaver.postメソッドの再定義



続きを読む

[JavaScript]
[gelato]
[tumblr]

コメント(全0件)
コメントをする


記事を書く
powered by ASAHIネット