3

我希望从我的 Node.js 应用程序中的 GitHub 存储库中检索所有问题。我已经使用 octokit 来做到这一点。从我收集的文档中我必须使用repo.getIssueEvents(),但这只是返回第一个拉取请求,这不是我所期望的。

我试过用谷歌搜索,但不断遇到我已经使用过的相同文档。我做错了什么?

这是我的代码:

var GitHubApi = require('octokit');
retrieveIssues: function(owner, repoName) {

  var gh = GitHubApi.new({  
  username: "user",
  password: "password"
  });


  var repo = gh.getRepo(owner, repoName);

  repo.getIssueEvents()
    .then(function(events) {console.log(events)})

}
4

1 回答 1

2

如果您参考这个 octokit 项目,它似乎没有公开 Github API 来获取问题,而只是为特定存储库发布事件。

在这里,Github 推荐使用octokit/rest for

npm install @octokit/rest

要获取所有问题(所有状态的问题和拉取请求),它将是:

const octokit = require('@octokit/rest')()

async function paginate(method) {
    let response = await method({
        owner: "google",
        repo: "gson",
        state: "all",
        per_page: 100
    })
    let {
        data
    } = response
    var count = 0;
    while (octokit.hasNextPage(response)) {
        count++;
        console.log(`${count} request`);
        response = await octokit.getNextPage(response)
        data = data.concat(response.data)
    }
    return data
}

paginate(octokit.issues.getForRepo)
    .then(data => {
        console.log(data);
    })

检查问题.getForRepo

如果您不想要拉取请求而只想要问题,您也可以执行这样的搜索请求:

const octokit = require('@octokit/rest')()

octokit.authenticate({
    type: 'oauth',
    token: 'YOUR_TOKEN'
});

async function paginate(method) {
    let response = await method({
        q: "repo:google/gson is:issue",
        per_page: 100
    })
    let data = response.data.items;
    var count = 0;
    while (octokit.hasNextPage(response)) {
        count++;
        console.log(`request n°${count}`);
        response = await octokit.getNextPage(response);
        data = data.concat(response.data.items);
    }
    return data
}

paginate(octokit.search.issues)
    .then(data => {
        console.log(data);
        console.log(`retrieved ${data.length} issues`);
    })

但请注意,搜索请求中仅返回前 1000 个问题

于 2018-05-22T23:57:04.600 回答