0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Backlog APIで課題一覧を取得・加工して出力する方法

Last updated at Posted at 2021-01-31

Backlog APIとは?
バックログの各種情報をhttpリクエストにより取得し、レスポンスをJSON形式で受け取ることができるBacklog公式のWebAPI
バックログ自体、View(HTML)からこのAPIをたたく仕組みで動いていると思われる
APIの場合便利なのは、受け取ったJSONを任意のプラグラミング言語にて配列操作し加工・出力することができること
もちろん標準機能でも高度な検索機能を持っているが、例えば「プロジェクトごとの月内のみの工数を知りたい」などの標準機能にない機能を開発することができる
backlog_api利用の概要.png
実際にBacklogAPIを叩いてみるサンプルは下記の通り

issues_list.php
<?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";
}

基本はこれだけ。あとは言語で普通に用意された文字列加工や条件分岐、加減算などで欲しい情報を修正すればよい。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?