Movie Caster API

というわけでMovei Caster APIのメモ書き.ていうか,誰も書いて無いようなので,自分のために・・・(気が向いたらもう少しきれいに書き直すかも)
 Movie Casterは様々なフォーマットの動画をflv形式に変換して投稿したり閲覧できたりする,まぁ,youtube見たいなサイトで,そいつを技術者向けにAPIとして公開したのがMovie Caster APIなわけです.

 でそいつを使いたいのですが,基本的にPOSTメソッドしか受け付けてくれません.で,じゃあ,さっさとformで書けばいいかというと,そういうわけにも行かないのです.
 なぜなら,動画登録はbase64encodeが必要で,おまけにアクセスキーの作成にはmd5暗号化が必要だからです.で,base64とかmd5がいらないコマンドとしてlist(投稿動画の情報入手)があるんですが,こいつは自分がアップした動画のリストしか取ってこないので,投稿しない限り意味が無いのです.
 おまけに,API仕様のページにエラーの種類が書いてあるのですがlistコマンドにはエラーが書いてないです.「1」は「投稿動画がありません」というエラータイプのようです.
 で,投稿するにはどうするか?ですが,どっかでスクリプトを書く必要があるのですが,外部サイトへのアクセスになってjavascriptのcreateHttpRequestでは,セキュリティ上外部に飛ばせないので方法は以下の2つ.

  1. 外部cgi経由を使うか
  2. あきらめてcgiで書くか

 まぁ,人様のところに迷惑をかけるのもあれなので,見よう見まねでphpを書くことにします.


 で,とりあえず用意しなければならないfieldは,

  1. key(md5使用)
  2. data(base64encode)
  3. name(url encode)
  4. md5(動画データチェックサム用・任意)

の4つです.最低限は3つです.

  • key

md5([yyyymmddHHMMSS]+[secret key])+[yyyymmddHHMMSS]+[user ID]
md5()もgetdate()も使えるので,これは大したこと無いです.

  • data

 <form><input type="file" name="data">でファイルを指定して,
$_FILES['data']['tmp_name']でデータが取れます.
こいつをファイルハンドルで読み込むのですが,このときに
$fp = fopen($_FILES['data']['tmp_name'], "r");
stream_filter_append($fp, 'convert.base64-encode');
として最初からbase64-encode filterをかけてしまえば,
fread($fp, filesize($_FILES['data']['tmp_name']));
としたときにbase64encodeされたデータが取れます.

で,まぁ,めんどくさいヒトはファイルの名前は英数字でつければとりあえず動くのです.
 で,こいつらを

#開いて
$req = &new HTTP_Request($url);
#プロキシかけたりして
$req->setProxy('xxx.xxx.xxx.xxx', 8080);
#メソッドをPOSTにして,
$req->setMethod(HTTP_REQUEST_METHOD_POST);
#データを渡して
$req->addPostData('key', $key);
#送りつけて
$req->sendRequest();
#結果を受け取れる
$response = $req->getResponseBody();

こういうわけです.ふふふのふ