OAuth認証 for Twitter
TwitterのBASIC認証が8月16日から使えなくなります。そのため、以前書いた、cURL認証を使った方法は使えなくなります。
参考:
- http://www.sdn-project.net/labo/oauth.html ← これがすごくわかり易い。この通りにやればOK
- http://gihyo.jp/dev/serial/01/twitterbot/0003
- http://www.hosimitu.com/2010/04/2920-1456.php
要は、OAuth認証してAPIを利用するには、
Consumer key, Consumer secret, Access Token (oauth_token), Access Token Secret (oauth_token_secret)
の4つが必要。あとはGETやらPOSTやらDELETEやらで、やり取りをすれば良い。
なお、認証が必要なコールについては
$to = new TwitterOAuth($consumer_key, $consumer_secret, $oauth_token, $oauth_token_secret);
だが、認証が不要なコールについては
$to = new TwitterOAuth('','','','');
でも行ける。
また、methodとしてはPOST, GET以外にも、DELETEも使える。
さて、投稿するときには、
$params = array("status"=>$message); $url = "https://twitter.com/statuses/update.json"; $req = $to->OAuthRequest($url,"POST",$params);
とするが、この$messageはこれまでcURLを使っていたときにはurlencode()した値を渡していた。
しかし、このAPIだと、urlencode後の文字数を数えているよう、余裕で140字をオーバーしてしまう。
とりあえず、urlencode()は外して投稿するようにしているが、なにか対策があれば教えてください。
ちなみに
http://www.hosimitu.com/2009/11/2020-1358.phpにある
//in_reply_to_status_idを指定するのならば array("status"=>"@hogehoge reply","in_reply_to_status_id"=>"0000000000"); とする。 //$req = $to->OAuthRequest("https://twitter.com/statuses/update.xml",array("status"=>$mes,"in_reply_to_status_id"=>"0000000000"),"POST");
これを試してみると、ちゃんと"in reply to"と表示させられる。これはbotにRTさせるときに有用ではないかと思う。