Services_Twitter0.5.0を使ってみてつまづいたところ

月曜日, 3月 1st, 2010

こんにちは、なかわけです。

PHPのPearライブラリ『Services_Twitter』を使ってみました。
基本的にとても簡単です。
が、0.4.0から使ってた人は仕様が変わったのでコードをちょこっと書き換えないといけません。

APIは、

http://api.twitter.com/1

これに基づいています。
単純にtweetしたいときは、

require_once 'Services/Twitter.php';
$username = 'Your_Username';
$password = 'Your_Password';
try {
    $twitter = new Services_Twitter($username, $password);
    $msg = $twitter->statuses->update("I'm coding with PEAR right now!");
    print_r($msg);
} catch (Services_Twitter_Exception $e) {
    echo $e->getMessage(); 
}

これだけでできます。
使っていてつまづいたところは、

  • replyの仕方がわからなかったこと
  • Services_Twitterが日本語に対応してなかったというところ

です。

replyの方法は、twitterのAPIのdocumentをよく読んだら書いてありました;
http://apiwiki.twitter.com/Twitter-REST-API-Method:-statuses%C2%A0update
具体的には、以下のようなコードです。

require_once 'Services/Twitter.php';
$username = 'Your_Username';
$password = 'Your_Password';
try {
    $twitter = new Services_Twitter($username, $password);
    $msg = $twitter->statuses->update(array(
                       'status' => '@friendname コメント',
                       'in_reply_to_status_id' => 'replyするtweetのID')
    );
    print_r($msg);
} catch (Services_Twitter_Exception $e) {
    echo $e->getMessage(); 
}

ポイントはstatus内(つぶやき内)にreplyしたい人のユーザーネームを自分で入れるのと、in_reply_to_status_idを指定すること。そして、この二つを配列にして渡すというところです。

つまづいた2点目は日本語による文字数です。
このライブラリを作ったのは外人さんなので2バイト文字のことなんで考えてません。
Services_Twitter.phpのこの部分。

if ($maxLength !== null && strlen($val) > $maxLength) {

なので、直接コードを修正します。

if ($maxLength !== null && mb_strlen($val, 'UTF-8') > $maxLength) {

一応、mb_strlen()の第2引数に文字コードを指定しておいた方が無難です。
久しぶりに個人的なコードが書けて楽しかったですヾ(*´∀`*)ノ

Tags: , ,

Leave a Reply

*