livedoor PICS WebService Interface を使ってみた
現在書いているプログラム(データベースでごにょごにょ)が、大変単調だけどたまに複雑に絡み合った問題が発生したりする、大変やる気が萎える部分なので、ちょっと気分転換に別のことをしてみた。
livedoorがFlickrみたいなの作りたくて作っちゃいました、みたいなlivedoor PICSに、最近流行のAPIが公開された。それがコレ。Perlだと、CPANからモジュール引っ張ってきてサンプルコードのとおりに書いてやればOKっぽい。
さて、livedoor PICSとマッシュアップさせたら面白げなプログラムがPHPで書かれているので、PHPでアップロードできるようにしたいです。
まずは、livedoor PICS APIはAtom API(Atom PP)を使っているので、Atom APIのPHPのライブラリを探してみたら、PHP Atom APIというまんまのライブラリを発見。
このライブラリはまだできたばかりなので、ドキュメントが超適当。ひとまず、ライブラリをざっと見た感じをまとめておこう。
このライブラリは、4つの基本的なクラスと、2つの認証用クラスから成っているらしい。クラスが何に対応しているのかのイメージ図を付けてみた。上の方にあるから見て。
- 基本クラス
- 認証用クラス
- BasicAuth・・・Basic認証
- WSSE・・・WSSE認証
WSSE認証は、ちょっと癖があるようなので、観測気球さんあたりを参照すべし。livedoor PICSについては、PHP Atom APIの機能を何も考えずに使ったらOKだった。
とりあえず写真をアップロードするスクリプト。
set_author('haya'); $entry->set_title(array ( 'title' => 'test pics', 'xmlns' => 'http://purl.org/atom/ns#', )); $entry->set_content(array('type' => 'image/jpg', 'content' => base64_encode(file_get_contents('ore.jpg')), 'mode' => "base64" ) ); // 認証用のオブジェクトを作成 $auth = new WSSE('harg', '*****'); $post = new AtomRequest('POST', 'http://ws.pics.livedoor.com/atom/harg', $auth, $entry->to_xml()); // リクエスト実行 $post->exec(); ?>
画像とかバイナリをPOSTするときも、XML形式でPOSTするんですね。Atom APIをろくに知らないままやろうとしていたので、まずはそこでつまづいた。
そしてその後、バイナリをXMLにしてPOSTしてもなぜか投稿できない。とりあえず知識が無いのに悩んでもしょうがないので、PHPでAtom APIしている何かがないかと探してみると、はてなフォトライフがAtom APIだった。そしてはてなフォトライフで探してみたら、ありましたよ、Services_Hatena。どうやら、はてなのAPIを使うライブラリをPHPで実装しているらしい。その中のフォトライフの部分を参考にしてみると、バイナリデータをbase64エンコードしていることが判明。早速base64エンコードしてlivedoor PICSにPOSTしてみたら、見事に投稿成功!おつかれさまでした。
で、base64エンコードってなんだっけ、と思って調べてみたら、バイナリデータを送るときに、生バイナリではXMLのようなテキストには載せられないので、そういうときにテキストデータに変換するのがbase64エンコードだそうですよ。また一つ勉強になりますた。
今回アップロードした写真。