search
LoginSignup
3

More than 1 year has passed since last update.

posted at

updated at

Organization

Redmineのチケット情報をAPIを用いて取得する方法 with GAS

Redmineのチケットのうち自分に関係のあるチケットを抽出・管理したいと思い、GoogleAppsScriptを用いて整理ツールを作成しました。
そのときに使用したAPIの書き方を紹介します。

チケットの一覧を取得

以下のようにAPIを実行することで、指定した検索条件に一致するチケット一覧が取得できます。

[ドメイン名]/issues.json?[検索条件]&key=[APIキー]

私はRedmineに登録しているクエリを指定してチケット一覧を取得しています。
取得したデータはJson形式で取得されるため、変換してあげることで連想配列として情報を取得することが可能です。

let res = UrlFetchApp.fetch("[ドメイン名]/issues.json?query_id=[クエリID]&key=[APIキー]");
let ticketJson = JSON.parse(res.getContentText());
let ticketList = ticketJson["issues"];
for(var i = 0; i < ticketList.length; i++) {
    console.log(
        ticketList[i]["id"]                      // チケットID
        + ticketList[i]["project"]["name"]       // プロジェクト名
        + ticketList[i]["tracker"]["name"]       // トラッカー名
        + ticketList[i]["status"]["name"]        // ステータス名
        + ticketList[i]["priority"]["name"]      // 優先度名
        + ticketList[i]["subject"]               // 題名
        + ticketList[i]["assigned_to"]["name"]   // 担当者名
        + ticketList[i]["fixed_version"]["name"] // バージョン名
        + ticketList[i]["created_on"]            // 作成日時
        + ticketList[i]["updated_on"]            // 更新日時
        + ticketList[i]["due_date"]              // 期日
        + ticketList[i]["description"]           // 説明
    );
}

チケットの詳細を取得

前項で取得したチケット一覧には「関連チケット」や「注記」の情報が含まれていません。
そのため、以下のAPIを実行することで、該当チケットの詳細を取得することができます。

[ドメイン名]/issues/[チケットNo].json?include=attachments,journals&key=[APIキー]

一覧を取得した後、詳細が必要なチケットはfor文で1つ1つチケットの内容を確認し、情報の整理を行っていきました。

let res = UrlFetchApp.fetch("[ドメイン名]/[チケットNo].json?include=attachments,journals&key=[APIキー]");
let ticketInfoJson = JSON.parse(res.getContentText());
let ticketInfo = ticketInfoJson["issue"];
if(ticketInfo["relations"] != null) {
    // 関連チケットの取得
    var relationText = "";
    for(var j = 0; j < ticketInfo["relations"].length; j++) {
        relationText = relationText + "," + relationList[ticketInfo["relations"][j]["relation_type"]] + " #" + ticketInfo["relations"][j]["issue_id"];
    }
    // データ保存処理
}
if(ticketInfo["journals"].length > 0) {
    // 注記の取得
    var commentText = "";
    for(var j = 0; j < ticketInfo["journals"].length; j++) {
        if(ticketInfo["journals"][j]["notes"] != null) {
            commentText = commentText + "\t" + ticketInfo["journals"][j]["notes"];
        }
    }
    // データ保存処理
}

参考資料

Redmine API

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
What you can do with signing up
3