2009年01月21日

XML_RPC2を使ってみる

 どういうわけか、インストールされていたはずの PEAR XML_RPC が削除されてしまっていたので、代わりに後継といわれる XML_RPC2 を使ってみました。XML_RPC2 は PHP5 専用ですが、PHP4 のサポートも終了しましたし、今後こちらが使われることが増えていくでしょう。

 XML_RPC2 の特徴として、サーバからのレスポンスをキャッシュすることができるというものがあります。これまで、XML_RPC と Cache_Lite を組み合わせて使っていた人からすると、一つで済むので手間がだいぶ省けると思います。

 サンプルとして、Trend Antenna でも使っているはてなダイアリーキーワード連想語APIのサンプルを XML_RPC2 で書いてみようと思います(キャッシュ付き)。

require_once 'XML/RPC2/CachedClient.php';

$options = array(
    'prefix' => 'hatena.',
    'encoding' => 'utf-8',
    'cacheDebug' => false,
    'cacheOptions' => array(
        'cacheDir' => '/tmp/',
        'lifetime' => 21600,
        'automaticCleaningFactor' => 20,
        'hashedDirectoryLevel' => 1,
        'cacheByDefault' => true
    )
);

// XML_RPC2_CachedClient オブジェクトを作成します
$client = XML_RPC2_CachedClient::create('http://d.hatena.ne.jp/xmlrpc', $options);

try {
    $result = $client->getSimilarWord(array('wordlist' => array('Hatena', 'PHP')));
    $ret_val = array_values($result['wordlist']);
} catch (XML_RPC2_FaultException $e) {
    // XMLRPC サーバが XMLRPC のエラーを返しました
    die('Exception #' . $e->getFaultCode() . ' : ' . $e->getFaultString());
} catch (Exception $e) {
    // その他のエラー (HTTP あるいはネットワークの問題など...)
    die('Exception : ' . $e->getMessage());
}

foreach($ret_val as $word) {
    echo $word['word'] . ', ';
}

 こんな感じです。XML_RPC と比べると、XMLRPC の型を意識せずに使えることと、サーバのメソッドをクライアントオブジェクト(例の $client)のメソッドとして呼び出して使うので、スクリプトが見やすいという点が便利だと思います。なお、cacheOptions の中身は、Cache_Lite と同じ部分もあるので、それほど難しくないと思います。

posted by まいける at 08:33 | Comment(0) | TrackBack(0) | PHP