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エンコードではなく、生データしか受け付けないようになったようだ。
コメント