TimelogのAPIを使ってみる

Timelogというサービスがあります。

http://timelog.jp/
Twitterと似たような日本サービス。Twitterがローカライズされていないので、こっちから入る人も多いと思います。

とりあえず登録。そしてAPIを試してみました。(APIコンテストがあったと気がついた瞬間、終わってもいた)
APIの利用方法として今回はPHPを使いました。APIがBASIC認証になっているので、PEARのHTTP_Requestを使いました。BASIC認証ありのfile_get_contentsライクなfunctionは以下のように書けます。

require_once('HTTP/Request.php');
function file_get_contents_with_ba($url, $id, $pw)
{
  $req = new HTTP_Request($url);
  if (isset($id) && isset($pw)) {
    $req->setBasicAuth($id, $pw);
  }
  $response = $req->sendRequest();
  $contents = "";
  if (PEAR::isError($response)) {
    echo $response->getMessage();
  } else {
    $contents = $req->getResponseBody();
  }
  return $contents;
}

さて、新しいメモの登録ですが、postするときはurlencodeではなくrawurlencodeでエンコードしてくださいとあります。HTTP_Requestは内部でurlencodeしちゃうようなので、addPostDataの第三引数にtrueを渡します。これは「すでにencodeしちゃったぜ」フラグです。

コードは以下のようになります。UTF-8前提かつ、エラーハンドリングなしなのであしからず・・・

require_once('HTTP/Request.php');
function post_new_msg($id, $pw, $msg)
{
  $url = 'http://api.timelog.jp/new.asp';
  $req = new HTTP_Request($url);
  $req->setMethod(HTTP_REQUEST_METHOD_POST);
  if (isset($id) && isset($pw)) {
    $req->setBasicAuth($id, $pw);
  }
  $msg = rawurlencode($msg);
  $req->addPostData('text', $msg, true);
  $req->sendRequest();
  $response = $req->getResponseBody();
  return $req->GetResponseCode();
}