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 は自動的にリンクに変換されたけど、これはアカウントの設定で選択できるのかも。あ、いやできなさそう。(^_^;