tohokuaikiのチラシの裏

技術的ネタとか。

外部APIを有効にする

Confluence

Confluenceっていうのは、Javaでできた企業用のWiki。さすがに企業が使ってるプロダクトだけあって、MediaWikiとはちょっと違う。さすが。しかも、ライセンス制だからそんなに高くない。一人月額1000円とか。

Confluenceの外部APIをたたくだけの簡単なお仕事です。

ということで、調査。とりあえず日本語マニュアルがあった。素晴らしい。

16ページの「リモートAPIを有効にする」・・・なんだけど、いきなり詰まった。「管理コンソール」が見つからない・・・・。やっと見つけた。「Confluence管理者」っていうところ。

さらに、左側の一番上の「一般設定」というところをクリックして、そのページの真ん中あたりを見るとあった。「リモート API (XML-RPC & SOAP):」これをONにする。

リモート API への匿名アクセスは、オフにしておく。

とりあえず、XML-RPC

マニュアル読みつつ格闘。

接続口は、 http://<>/rpc/xmlrpc

    1. メソッドは、confluence1. というプレフィクスが付く。たとえば、getPage メソッドは confluence1.getPage .となる。
    2. パラメータはケースインセンティブ
    3. マニュアル内でVectorというのがあったら、配列と思ってくれれば
    4. Confluenceは64桁実数をIDとするが、XML-RPCは32ケタまでしか取れないので、String型とする
    5. セッションライフタイムは30分だけど、これは/confluence/WEB-INF/lib/confluence-x.jar ファイルにある applicationContext.xml を修正すれば

基本のAuth

PHPPEAR::XML_RPCでクライアントこんな感じ

<?php
$client = new XML_RPC_client( $xmlrpc_path, $xmlrpc_host, 80 );

// ログイン String login(String username, String password) 
$username = new XML_RPC_Value('admin', 'string' );
$password = new XML_RPC_Value('**********', 'string' );

//メッセージ作成
$message = new XML_RPC_Message(
    'confluence1.login',
    array($username, $password));

おっと、PEARマニュアル見たらXML_RPC2使えって言われたよ。

あぁ、こりゃ確かに便利やわ・・・。XML-RPCメソッドがオブジェクトのメソッドとしてコールでくる。

<?php
require_once 'XML/RPC2/Client.php';

$options = array(
    'prefix' => 'confluence1.'
);

//クライアントの作成
$client = XML_RPC2_Client::create(
    sprintf('http://%s/rpc/xmlrpc', CONFLUENCE_SERVER),
    $options);

try {
    $re = $client->login('admin', '*************');
} catch (XML_RPC2_FaultException $e) {
    // The XMLRPC server returns a XMLRPC error
    die('Exception #' . $e->getFaultCode() . ' : ' . $e->getFaultString());
} catch (Exception $e) {  
    // Other errors (HTTP or networking problems...)
    die('Exception : ' . $e->getMessage());
}

で、帰ってくるトークンが今後のAPIの時の全てのキーとして使えるもの。

とりあえず、ここまで。