【GAS】バックログAPIを使ってみた。

2021年7月24日その他

0

バージョンアップを公開!

全てのPJを取得してバックログの課題をスプシに出力するGAS

GASとバックログAPIを使って課題一覧を出力するようにしてみた。

function myFunction() {
    //バックログのスペースIDを入れます。 以下のOOOのような部分です。
    //https: //hoge.backlog.jp/
    const spaceID = "hoge";
    //バックログのAPIキーです。 プロフィールアイコン→ 個人設定→ APIから発行する必要です。(2020/12/31時点では以下のURLでアクセス可能です。)
    //https: //hoge.backlog.jp/EditApiSettings.action
    const apiKey = "hogehoge";
    //プロジェクトIDです。 課題一覧の画面でURLから取得できます。
    const projectId = "12345678";
    //100件ずつしか取得できないのでオフセットを加算して全件取得します。
    var offset = 1;
    //かっこ悪いですがloop変数がtrueなら以下のwhile文を回します
    var loop = true;
    while (loop) {
        //sort = statusでステータス順で取得します
        //statusId[] = でステータスが4=完了,3=処理済み,2=処理中,1=未対応で取得できます。
        //countは設定しないと20になります。
        //offsetで初期は1,2周目は101から取得されます
        const api = "https://" + spaceID + ".backlog.jp/api/v2/issues?apiKey = " + apiKey + " & projectId[] = " + projectId + " & sort = status & order = & statusId[] = 4 & statusId[] = 3 & statusId[] = 2 & statusId[] = 1 & count = 100 & offset = " + offset;
        //apiを叩いてレスポンスを変数に入れます。
        var response = UrlFetchApp.fetch(api);
        //課題一覧を配列にして変数に入れます。
        var issue_list = JSON.parse(response.getContentText());
        
        //スプレッドシートのIDを入れます。
        const sheetId = "hogehoge";
        //シート名を入れます。
        const sheet_name = "課題一覧";
        var spreadsheet = SpreadsheetApp.openById(sheetId);
        var sheet = spreadsheet.getSheetByName(sheet_name);
        //1行目はタイトルを入れるのでずらします。
        var range = 1 + offset;
        //1行目はタイトルを入れます。これでシートの中身を全部消してもOKです。
        sheet.getRange(1, 1).setValue("課題番号");
        sheet.getRange(1, 2).setValue("概要");
        sheet.getRange(1, 3).setValue("ステータス");
        sheet.getRange(1, 4).setValue("担当者");
        sheet.getRange(1, 5).setValue("期限");
        sheet.getRange(1, 6).setValue("カテゴリー");
        sheet.getRange(1, 7).setValue("URL");
        //2行目からは課題情報が入ります。
        for (let i = 0; i < Object.keys(issue_list).length; i++) {
            sheet.getRange(i + range, 1).setValue(issue_list[i].issueKey);
            sheet.getRange(i + range, 2).setValue(issue_list[i].summary);
            sheet.getRange(i + range, 3).setValue(issue_list[i].status.name);
            //担当者が未設定だとその上の階層のassigneeが空になってエラーになるのでこのように三項演算子でnullのときの処理を書きます。
            sheet.getRange(i + range, 4).setValue(issue_list[i].assignee ? issue_list[i].assignee.name : "未設定");
            sheet.getRange(i + range, 5).setValue(issue_list[i].dueDate);
            sheet.getRange(i + range, 6).setValue(issue_list[i].issueType.name);
            sheet.getRange(i + range, 7).setValue("https://hoge.backlog.jp/view/" + issue_list[i].issueKey);
        }
        //取ってきた配列が100の時は続きがある可能性があるので100ずらしてもう一度ループします
        if (Object.keys(issue_list).length == 100) {
            offset += 100;
        } else {
            loop = false;
        }
    }
}

0

Posted by riku