Services_Twitter、使いやすいんですが、プロフィール画像の変更で大いにはまりました。
いやぁ、こんなの
<?php $twitter = new Services_Twitter(); /* ここにOAuthのしょりごちょごちょ */ $twitter->account->update_profile_image(array('image' => $new_icon));
で余裕だぜ・・・とか思ってました。
それまでも、ツイート更新したり、ユーザー情報を持ってきたりできてたので。
ところが、これやってみるとResponseがこれですよ。
Could not authenticate with OAuth
むきーってなって、色々やってたら
ですよ。
TwitterのAPI仕様書とか見まくって、ほんでもわからなくって、ついなびからアイコン交換とかやってみて、交換できて「わー、おれがTwitterから嫌われているの?」とか思ったりして、試行錯誤したわけです。そんなことしてたら、「フジロック行きます!」のアイコンになっちゃって、「フジロック行くんですか!??」とかいわれたり。。。いや、行きませんから。。。。
困ってる人は他にも見つけられて
http://yamasan-diary.blogspot.com/2010/08/twitterupdateprofileimage-500.html
とか。
http://blog.cheki.net/archives/1613
では、HTTP_Request2::detectMimeType()のContent-Typeが画像対応して無いとダメよっていうから
<?php // images if (preg_match('/\.(jpe?g|png|gif)$/i', $filename, $m)){ $type = strtolower($m[1]); if ($type == 'jpg') $type = 'jpeg'; $info = 'image/'.$type; }
して加えたんだけど、ダメ。
ほんで、しょーがないなーって・・・でも、OAuthの部分をイチから書くのは面倒なので、
<?php include_once 'HTTP/OAuth/Consumer/Request.php'; $req = new HTTP_Request2(); // Use the same instance of HTTP_Request2 $consumerRequest = new HTTP_OAuth_Consumer_Request; $consumerRequest->accept($req); $this->oauth->accept($consumerRequest); $uri = 'http://api.twitter.com/1/account/update_profile_image.json'; $params = array(); $method = "POST"; $req->addUpload('image', $new_icon); $response = $this->oauth->sendRequest($uri, $params, $method);
ってやったわけです。(Services_Twitter::sendOAuthRequest()からのほぼパクリ)
そしたら・・・。なんと、動くわけです。やたー。
どこが悪いのかなーって、ちろっとソース見ててなんとなく
pear/Services/Twitter.php
<?php protected function sendOAuthRequest($uri, $method, $params, $files) { include_once 'HTTP/OAuth/Consumer/Request.php'; try { $request = clone $this->getRequest();
このcloneしてる部分があやしいなーって。思って
$request = new HTTP_Request
とかしてみたのですが、うまくいかず。
なんなんだろう?
ま、いいや。