Drupal で、XMLRPC を使う方法(初級)

Drupal を他のサイトやアプリケーション、プログラムと連携させるには、XMLRPC で連携させるという方法がある。Drupal は XMLRPC サーバになれるから、自身の作製したモジュールから XMLRPC サーバのハンドラ(XMLRPCクライアントから呼ばれるメソッドのこと)を書いてあげればよい。サーバ側はロジックを書くことに専念できるので、これだけでも Drupal を使うメリットでもあるはずだ。 すべては hook_xmlrpc がヒントとなる。セオリーに従って api.drupal.org を調べてみるのではあるが、説明されているようで私には理解不能だった^^;ドキュメントが整えられているようで中身がよくわからないのが現状の Drupal である。まぁここのサンプルでスラスラ理解できる人は、よほど優秀なプログラマーだろうからこのサイトには訪れて来るまい(笑) で、Drupal を XMLRPC サーバにするには…というか、Drupal 自身、すでに XMLRPC サーバなわけだけれども、固有の処理をさせたいときは、以下の例が一番シンプルなものとなる。ここでは自身のモジュール名を example、XMLRPC での呼び出しメソッド名(関数名)を example.method としている。モジュール名とメソッド名をシンクロさせるのが Drupal 流儀であるから、それに従う。そうすると Drupal のシステム側(本体)から呼ばれる関数は、example_method() となる。
<?php

function example_xmlrpc() {
  return array(
   
'example.method' => 'example_method'
 
);
}

function
example_method() {

 
$string = 'passed';
  return
$string;
}

?>
サーバ側はこれでよくて、クライアント側はどうすればいいのだうろか?クライアントの言語が PHP だとして、まずは、PEAR の XMLRPC のライブラリをインストールする。Drupal への XMLRPC の呼び出し URL は
https://yourdomain.com/xmlrpc.php
である。その上で、一番シンプルな xmlrpc クライアントは、次のような感じとなるだろう。
<?php

require_once('XML/RPC.php');

$XMLRPC_HOSTNAME = 'https://yourdomain.com';
$XMLRPC_PATH     = '/xmlrpc.php';
$XMLRPC_METHOD   = 'example.method';

function
xmlrpc() {

  global
$XMLRPC_HOSTNAME;
  global
$XMLRPC_PATH;
  global
$XMLRPC_METHOD;

 
$GLOBALS['XML_RPC_defencoding'] = 'UTF-8';

 
// クライアントの作成
 
$client = new XML_RPC_client($XMLRPC_PATH, $XMLRPC_HOSTNAME);

 
// メッセージ作成
 
$params = array();
 
$message = new XML_RPC_Message($XMLRPC_METHOD, $params);
 
$response = $client->send($message);

 
// レスポンスの処理
 
if (!$response->faultCode()) {

   
$v = $response->value();
    print
"Value: ". $v->scalarval() ."<br>";
    print
"The XML received:<blockquote>" . $response->serialize();
    print
"</blockquote>";

  } else {

    print
"Fault Code:   " . $response->faultCode()   . "<br>";
    print
"Fault Reason: " . $response->faultString() . "<br>";
  }
  exit();
}
?>
Drupal から上記 PHP で書かれた XMLRPC クライアントに返される XML 文字列は以下の通りとなる。
<methodResponse>
<params>
<param>
<value><string>passed</string></value>
</param>
</params>
</methodResponse>
トラックバック URL: https://perltips.twinkle.cc/trackback/171