Parallax Image

Cutls Code Archives


SNZ 2016

Croudiaで画像を上げる

カテゴリ:Croudia 投稿日:2016年3月5日

お久しぶりです。Croudia REST APIの研究を続けていましたがどうしても画像のアップロードができずに半ば諦めていました。Croudia Developer Centerではなんか難しいリクエスト例が乗ってるし・・・

POST /2/statuses/update_with_media.json HTTP/1.1
Host: api.croudia.com
User-Agent: Chrome/28.0.1500.72
Content-Length: 30827
Authorization: Bearar b17dab8dfe459cd7145bb8f9e11eba105423173f7d5516278a5c522b2e459e30
Content-Type: multipart/form-data;boundary=——WebKitFormBoundarylB5PIGta0K4X5D0v

Accept-Encoding: gzip

——WebKitFormBoundarylB5PIGta0K4X5D0v
Content-Disposition: form-data; name=”status”

Hello world
——WebKitFormBoundarylB5PIGta0K4X5D0v
Content-Disposition: form-data; name=”media”; filename=”crouneko.png”
Content-Type: image/png

<画像データ>
——WebKitFormBoundarylB5PIGta0K4X5D0v–

ちょっとした画像にHello Worldをささやくだけでこんなリクエストに。こんなんできるわけない。
しかし、2時間いろんなサイトを見て研究したところ、いとも簡単にできたので紹介します。PHPでcURLを用いてやります。
前提:<form method=”post” enctype=”multipart/form-data”>から送信。enctype属性はとても重要。そしてname=”text”にささやく内容、name=”userfile”に投稿する画像

session_start();
$header = [
    "Host: api.croudia.com\r\nAuthorization: Bearer ".$_SESSION['at']
];
//アクセストークンはSESSIONに入っているものとする
$data = array('media'=>'@'.$_FILES['userfile']
['tmp_name'].';
filename=>'.$_FILES['userfile']['name'].';
type=>$_FILES['userfile']['type']',
status=>$_POST["text"]);
//データ
$ch = curl_init(); 
//cURL始め
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
//POSTする内容をセット
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
//認証情報のヘッダー
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 curl_setopt($ch, CURLOPT_URL, 'https://api.croudia.com/2/statuses/update_with_media.json');
//そして叩くURL!
 $result = curl_exec($ch);
//実行!
print_r($result);
//statusオブジェクトが返ります
 curl_close($ch);

思ってたよりも簡単でした。こんなんに何時間も悩んでたんか・・・