Backlog APIとは?
バックログの各種情報をhttpリクエストにより取得し、レスポンスをJSON形式で受け取ることができるBacklog公式のWebAPI
バックログ自体、View(HTML)からこのAPIをたたく仕組みで動いていると思われる
APIの場合便利なのは、受け取ったJSONを任意のプラグラミング言語にて配列操作し加工・出力することができること
もちろん標準機能でも高度な検索機能を持っているが、例えば「プロジェクトごとの月内のみの工数を知りたい」などの標準機能にない機能を開発することができる
実際にBacklogAPIを叩いてみるサンプルは下記の通り
<?php
$hostname = '*****.backlog.jp'; //対象backlogのドメインを入れてください
$apiKey = '******************************'; //API keyを入れてください
$proj_id = getProjectIdFromKey($argv[1],$hostname,$apiKey); //PHPコマンドの第一引数にプロジェクトキーを設定
$from_date = $argv[2];//PHPコマンドの第2引数に取得開始更新日付を設定 例)php issues_list.php HOGE-1 2021-01-01
$cnt = 0;
$result = array();
while(1){
$offset = $cnt * 100;
$params = array(
'projectId[]' => $proj_id,
'count' => 100,
'offset' => $offset,
'updatedSince' => $from_date,
);
$headers = array('Content-Type:application/x-www-form-urlencoded');
$context = array(
'http' => array(
'method' => 'GET',
'header' => $headers,
'ignore_errors' => false
)
);
$url = 'https://'.$hostname.'/api/v2/issues?apiKey='.$apiKey.'&'. http_build_query($params, '', '&');
$response = file_get_contents($url, false, stream_context_create($context));
//echo $response;
# レスポンスを変数で扱えるように変換
$json = mb_convert_encoding($response, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN');
$json = json_decode($json, true);
if(count($json) < 100){
$result = array_merge($result, $json);
break;
} else {
$cnt++;
$result = array_merge($result, $json);
}
}
foreach($result as $value) {
//例として、第一引数でしていしたプロジェクトの、第二引数で指定した日付以降に更新された課題の課題キーと課題名を出力
echo $value["issueKey"];
echo $value["summary"]."\n";
}
function getProjectIdFromKey($projectKey,$hostname,$apiKey){
$cnt = 0;
$result = array();
while(1){
$offset = $cnt * 100;
$headers = array('Content-Type:application/x-www-form-urlencoded');
$context = array(
'http' => array(
'method' => 'GET',
'header' => $headers,
'ignore_errors' => false
)
);
$url = 'https://'.$hostname.'/api/v2/projects/'.$projectKey.'?apiKey='.$apiKey;
$response = file_get_contents($url, false, stream_context_create($context));
//echo $response;
$json = mb_convert_encoding($response, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN');
$json = json_decode($json, true);
if(count($json) < 100){
$result = array_merge($result, $json);
break;
} else {
$cnt++;
$result = array_merge($result, $json);
}
}
return $json["id"];
}
?>
このファイルを配置したディレクトリ内で、下記のコマンドを打てば、プロジェクト名「HOGE」の、2021-01-01以降に更新のあった課題一覧が取得できる。
php issues_list.php HOGE 2021-01-01
レスポンスのJSONがどのようなものかは、issues_list.phpの下記の行のコメントアウトを外すことで確認することができる。
//echo $response;
JSONのレスポンスを確認しながら、issues_list.php内の下記のforeach文で課題ごとに欲しい情報を表示させれば、各種集計表に必要な内容のみを表示させることができる。例えば課題の課題キーと課題名のみを一行ずつ出力したい場合は下記のようになる。
foreach($result as $value) {
echo $value["issueKey"];
echo $value["summary"]."\n";
}
基本はこれだけ。あとは言語で普通に用意された文字列加工や条件分岐、加減算などで欲しい情報を修正すればよい。