codebird-php というライブラリを使って、Twitterのヘッダ(バナー?)画像を更新しようと思ったんだけどうまくいかない。
最初に書いたコードはこんな感じ。
require_once('codebird.php');
// CONSUMER_KEYとかの定義は省略
\Codebird\Codebird::setConsumerKey(CONSUMER_KEY, CONSUMER_SECRET);
$cb = \Codebird\Codebird::getInstance();
$cb->setToken(ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
$image = 'image.jpg';
$data = base64_encode(file_get_contents($image));
$result = $cb->account_updateProfileBanner(array('banner' => $data));
var_dump($result);
返ってきた結果がこれである。
object(stdClass)#2 (3) {
["request"]=>
string(39) "/1.1/account/update_profile_banner.json"
["error"]=>
string(27) "Unrecognized image provided"
["httpstatus"]=>
int(400)
}
……よーわからんが怒られた。それ画像じゃないだろ?みたいに言われてる気がする。
もう一度APIのドキュメントを読んでみると画像データのパラメータについて、こんな風に書かれてる。
The Base64-encoded or raw image data being uploaded as the user's new profile banner.
Base64エンコードしたものか、生の画像データをアップロードしろ、とある。そこで以下のように書き換えてみた。
$image = 'image.jpg';
$data = file_get_contents($image);
$result = $cb->account_updateProfileBanner(array('banner' => $data));
var_dump($result);
その結果。
object(stdClass)#2 (1) {
["httpstatus"]=>
int(201)
}
成功ォォーーーー!!
うーん、「Base64-encoded or raw image data 」なのに、Base64で受け付けてくれないのはなんでだろ……。
ちなみに、アイコンと背景画像をアップロードするときはBase64しか受け付けないようだ。
画像付きツイートの場合は生データのみ。
2013-12-18追記:どうやらアイコンや背景についても、base64エンコードではなく、生データしか受け付けないようになったようだ。
コメント