やりたいこと
誰もアサインされていないissueが溜まっていくので整理しようぜ。
GAS(GoogleAppsScript)でGitHubAPIを叩き、該当のissueをスプレッドシートに出力する。
GitHubAPIを使う準備
- GitHubでアクセストークンを作成
- settings > Developer settings > Personal access tokens
- 「Generate new token」 ボタン押下
- Note: 好きな名前
- Select scopes: repoにチェック
- 作成後、表示されたアクセストークンを保存
APIのURLを確認
APIのURL
GET /repos/:owner/:repo/issues
Parameters
- assignee: none
- state: open
GASを作成
issue.gs
function issue() {
// GitHub アクセストークン
var GITHUB_ACCESS_TOKEN = 'xxxxxx';
// GitHub 組織名
var GITHUB_OWNER = 'xxxxxx';
// GitHub リポジトリ
var GITHUB_REPO = 'xxxxxx';
// API URL
var GITHUB_API_URL = 'https://api.github.com/repos/' + GITHUB_OWNER + '/' + GITHUB_REPO + '/issues?assignee=none&state=open';
// 出力するシートID
var SHEET_ID = 'xxxxxxx';
// 1pageのissue数
var page_num = 30;
var max_page = 100;
var ss = SpreadsheetApp.openById(SHEET_ID);
var sheet = ss.getSheets()[0];
for(var page_cnt = 0; page_cnt < max_page; page_cnt++) {
// APIアクセス
var header = {
"Authorization" : "token " + GITHUB_ACCESS_TOKEN
};
var options = {
"headers" : header,
}
var url = GITHUB_API_URL + "&page=" + (page_cnt+1);
var response = UrlFetchApp.fetch(url, options);
var issues = JSON.parse(response.getContentText());
if (issues.length == 0) {
break;
}
for(var index = 0; index < issues.length; index++) {
var rows = index + 2 + page_cnt * page_num;
// ID,件名,登録日
sheet.getRange(rows, 1).setValue(issues[index]['number']);
sheet.getRange(rows, 2).setValue(issues[index]['title']);
sheet.getRange(rows, 3).setValue(issues[index]['created_at']);
}
}
}