カテゴリー別アーカイブ: PHP

PHPから任意のbacklog APIを呼び出す

最近、Backlog を会社で使うようになりました。まだベータ版とは言え APIがあるようなので、PHPからAPIへのアクセスを試してみました。

Backlogアプリケーション を見てみると PHP用のライブラリがありましたが、2009年から更新されておらず、また対応しているAPIの数が圧倒的に少ないようです。ただ中身を見ると単なるXML-RPCコールに過ぎないので、こんな感じの関数を追加して任意のAPIを呼び出せるように改造しました。

% diff -u org/Backlog.php Backlog.php
--- org/Backlog.php     2009-05-20 12:05:53.000000000 +0900
+++ Backlog.php     2012-04-08 11:46:09.434337869 +0900
@@ -75,6 +75,16 @@
         $this->client->setCredentials($user, $password);
     }

+
+    public function callAPI($method, $params = NULL) {
+               if ($params == NULL) {
+                    $message = new XML_RPC_Message(self::PREFIX . $method);
+               } else {
+                    $message = new XML_RPC_Message(self::PREFIX . $method, $params);
+               }
+               return $this->_send($message);
+    }
+
     /**
      * 参加プロジェクトを取得する
      *

APIの呼び出し自体は非常に簡単です。ID/Passwordを指定してライブラリのインスタンスを作成して、メソッドを呼び出すだけです。

<?php
require_once 'Services/Backlog.php';

define('FQDN', 'hogehoge.backlog.jp');
define('ID', 'apiuser');
define('PASSWORD', 'password');

$backlog = new Services_Backlog(FQDN, ID, PASSWORD);

echo '<pre>';

# getProjectsの呼び出し
$result = $backlog->callAPI('getProjects');
print_r($result);

# getProjectの呼び出し
$params = new XML_RPC_Value('TESTProjectKey', 'string');
$result = $backlog->callAPI('getProject', array($params));
print_r($result);

# countIssueの呼び出し(ProjectID=12345, 状態=未対応、担当者未設定)
$params = array();
$params['projectId'] = new XML_RPC_Value('12345', 'string');
$params['statusId'] = new XML_RPC_Value(1, 'int');
$params['assignerId'] = new XML_RPC_Value(-1, 'int');
$result = $backlog->callAPI('countIssue',
  array(new XML_RPC_Value($params, 'struct')));
print_r($result);

echo '</pre>';

当たり前ではありますが、管理者権限じゃない限り、任意のプロジェクトの情報などを取得することはできません(人間ができないことはAPIでもできない)。

いずれは自動投稿なども試しては見たいですが、最初はプロジェクトや課題の状態を表示するダッシュボードのようなものが作れれば十分なので、ビューアー権限でAPI用のユーザ(例えばapiuser)を作成して、全プロジェクトに追加するという運用にしました。