Tumblr API を使った photo の POST に成功

やっと時間が取れたので、tumblr API を使った画像の投稿を試しました。

multipart/form-data による photo の投稿のサンプルコードはこんな感じです。

<?php
// Report all errors
ini_set('error_reporting', E_ALL);

// Authorization info
$tumblr_email    = 'your@mail.address';
$tumblr_password = 'secret';

// Data for new record
$post_type  = 'photo';
$post_caption  = 'キャプション( HTML もオーケー)';

// Image file
$filename = "temp/test.jpg";

// Prepare POST data
$request_multipart = array(
        'email'     => $tumblr_email,
        'password'  => $tumblr_password,
        'type'      => $post_type,
        'data'      => "@$filename",
        'caption'   => $post_caption,
        'generator' => 'API_test'
);


// Send the POST request (with cURL)
$c = curl_init('http://www.tumblr.com/api/write');
curl_setopt($c, CURLOPT_POST, true);
curl_setopt($c, CURLOPT_POSTFIELDS, $request_multipart);
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($c);
$status = curl_getinfo($c, CURLINFO_HTTP_CODE);
if (curl_errno($c)) {
echo "curl_error($c)\n";
}
curl_close($c);

// Check for success
if ($status == 201) {
    echo "Success! The new post ID is $result.\n";
} else if ($status == 403) {
    echo 'Bad email or password';
} else {
    echo "Error: $result\n";
}

?>


ついでに、かかった時間も比べてみます。まずは multipart/form-data のときの curl_getinfo() の出力結果。

Array
(
    [url] => http://www.tumblr.com/api/write
    [content_type] => text/plain; charset=utf-8
    [http_code] => 201
    [header_size] => 251
    [request_size] => 212
    [filetime] => -1
    [ssl_verify_result] => 0
    [redirect_count] => 0
    [total_time] => 1.912026
    [namelookup_time] => 0.001495
    [connect_time] => 0.089588
    [pretransfer_time] => 0.089868
    [size_upload] => 14080
    [size_download] => 8
    [speed_download] => 4
    [speed_upload] => 7363
    [download_content_length] => 8
    [upload_content_length] => 14080
    [starttransfer_time] => 0.202202
    [redirect_time] => 0
)

続いて、URL エンコードして POST した場合(API ドキュメントによれば、上の multipart/form-data の方がオーバーヘッドが随分少ないので推奨だそうです)。

結果から言うと、一応 multipart/form-data の方が速かったです。1回ずつしか試してないのでアテにならないデータですが。(^_^;
気になる人はデータを取ってみてください。

Array
(
    [url] => http://www.tumblr.com/api/write
    [content_type] => text/plain; charset=utf-8
    [http_code] => 201
    [header_size] => 230
    [request_size] => 13032
    [filetime] => -1
    [ssl_verify_result] => 0
    [redirect_count] => 0
    [total_time] => 2.931553
    [namelookup_time] => 0.035777
    [connect_time] => 0.101292
    [pretransfer_time] => 0.101588
    [size_upload] => 19794
    [size_download] => 8
    [speed_download] => 2
    [speed_upload] => 6752
    [download_content_length] => 8
    [upload_content_length] => 0
    [starttransfer_time] => 0.319115
    [redirect_time] => 0
)

なお、キャプションに関しては特に文字数の制限もなさそう。
URL は自動的にリンクに変換されたけど、これはアカウントの設定で選択できるのかも。あ、いやできなさそう。(^_^;