capture.photozou.js ブラウザでキャプチャしてフォト蔵にアップロードするJSActionsスクリプト v.0.0.1
はてなフォトライフにアップロードするやつを作ったときに、幅が450になってむかつく!から他のやつにアップロードするやつを作ろうというわけでフォト蔵を作りました。(けっきょく幅450制限は設定で変えられたのでもういいんですけど….)
ファイルの中身がほとんどおんなじなので、利便性は無視して共通部分を別ファイルにしたので以下の3つをJSActionsのglobalフォルダにでもインストールしてください。
そして同じglobalディレクトリに capture.photozou.js というファイルをつくってアップロード先のアルバムIDを入れます。
( {
album_id: 235273
} ) ;
ユーザIDとパスワードはFrefox自体が持っているものを使います。1回めに使うときに認証ダイアログが出てくるのでフォト蔵のアカウントのメールアドレスとパスワードを入力してください。で、入力しても1回めは機能しないです。(手抜きです)2回め以降はキャプチャしたものがフォト蔵に保存されるようになります。
javascriptのライブラリとJSActionsのインストーラ
こんなかんじでいろいろ(っていっても二種類ですけど)作ってみるとJSANのようにブラウザの中で動くことを前提としたライブラリではなく、chrome特権付きで動くことを前提としたjavascriptのライブラリがあったらいいなあと思います。MP3のID3タグを埋め込むのなんてCPANだったらふつうにMP3::Tagでおしまいなのに、当然そんなものはないのでバイナリエディタとid3v2.4.0-structure – ID3.orgを見比べながらfromCharCodeでpackと同じことをjavascriptでちまちまやらないといけなくて泣きました。(バイナリファイルをちまちまいじるの好きですけど)
ライブラリが増えると今度はJSActionsフォルダに入れるのが大変になので、配布するときは ****.jsa.zip みたいな名前でアーカイブすることにして、サフィクスが .jsa.zip のときはパッケージとして認識してインストールするみたいなJSActionsスクリプトもセットにしたら楽にいろんなおもちゃがつくれるようにならないでしょうか。
フォト蔵APIの感想
あと最後にフォト蔵APIを使ってみた感想を。
まず、これははまるひとしかはまらない問題ですがエラーメッセージですごくはまりました。
/rest/photo_addが正しいエンドポイントなのですが、間違って/rest/add_photoと書いていました….
存在しないAPIをたたいていてもHTTPのステータスコードが200で帰ってくるため(帰ってくる内容自体は空)タイポなのに気がつきませんでした。404 Not Found とか 501 Not Implemented を返してほしいです。
はてなフォトライフと比較してレスポンスが帰ってくるのが非常に遅いです。はてなフォトライフと違ってサムネイルが4サイズあるのでそれで遅いのだと思われます。バッチでアップロードするまともな使い方だとレスポンスは気にならないですが、ブラウザでキャプチャするときにはちょっと気になります。(2008.8.24訂正)使っていたアルバムの設定が悪かったのか、ほかのアルバムにアップロードしたら一瞬で処理が終わりました。はてなフォトライフより断然速いです。いいかんじ。
最後にもうひとつ、帰ってくるXMLが処理しにくかったです。
<?xml version="1.0" encoding="UTF-8" ?>
<rsp stat="ok">
<photo_id>4380791</photo_id>
<large_tag><![CDATA[
<a href="http://photozou.jp/photo/show/102898/4380791">
<img src="http://art7.photozou.jp/pub/898/102898/photo/4380791.png" alt="not enough memory" width="450" height="213" style="border:0" />
</a><br />
<a href="...">not enough memory</a> posted by <a href="...">(C)ku</a>]]>
</large_tag>
<medium_tag><![CDATA[
<a href="..."><img src="..." alt="not enough memory" width="240" height="113" style="border:0" /></a><br />
<a href="...">not enough memory</a> posted by <a href="...">(C)ku</a>]]>
</medium_tag>
</rsp>
こうなっているので写真の表示されるpermalinkを取得するのにこんな
var xml = new XML(response_text);
var html = new XML ( "<root>" + xml.large_tag.toString() + "</root>" );
var href = ( html.a[1].@href );
かんじで2回XMLを作らないといけません。FirefoxだとE4XのXMLでわりと楽ですが、他の言語だとわりとめんどくさいのではないでしょうか。
いまから仕様を変えるのは難しいかもしれないですがphoto_idのほかにuser_idもいっしょに返してくれるかlarge_tagの中をCDATAでHTMLを入れるのではなくXMLでURLが入っているほうが少しだけど使いやすくなると思います。

No comments
Jump to comment form | comments rss [?] | trackback uri [?]