使用 GitHub list-issues-for-a-repository API

Using GitHub list-issues-for-a-repository API

当您转到 GitHub 时,在问题下,它会将所有未解决的问题作为 HTML 页面拉出。我们想实现一个仪表板,显示存储库中的所有问题,按标签分组,包括那些未正确标记的问题。

这是对应的list-issues-for-a-repository API.

虽然我最初使用 jQuery 和 Javascript,但现在我使用 PHP 进行概念验证,因为它的内置会话处理让我可以使用相同的页面要登录,请 GitHub 进行身份验证和回调,然后继续。不过对我来说无所谓,任何语言都可以。

我已经设法通过 OAUTH2 访问 GitHub API,但是当我通过 https://api.github.com/orgs/{org}/repos 获取存储库列表时,它显示为一个空数组。

因为/orgs/{org}/reposAPIreturn是一个空数组,当然对应的/repos/{org}/{repo}/issuesAPI也会return出错。

编辑:参见解决方法!很高兴我终于成功了!

休息API。您需要使用 Http 请求调用一些端点。 我不知道你想使用什么语言,所以我不能给你一个很好的例子来说明如何实现这一点。 如果您还不知道要使用哪种语言,请使用 postman 创建对 github API 的 REST API 调用。

假设您想检索 microsoft's typescript repo 的问题,您需要调用此 API 端点:

https://api.github.com/repos/microsoft/typescript/issues

请注意,我已将文档的 :owner:repo 值替换为我正在尝试获取的文档。

然后您可以将一些参数传递给调用以过滤您的数据,例如 API 标签。

https://api.github.com/repos/microsoft/typescript/issues?labels=API

这只会 return 个标记为 API 的问题。

这是使用 API 的基础知识。

您可以使用 jQuery Ajax 访问 Github API 并添加基本身份验证 header 进行身份验证(参见 here ),下面显示了一个示例,这将提取给定回购的问题并在警报中显示前 10 个 window。

请在此处查看有关提取问题的文档:https://developer.github.com/v3/issues/ 以了解您可以使用哪些参数来过滤、排序等。

例如,您可以使用以下方法获取所有标记为 'bug' 的问题:

/issues?labels=bug

这可以包含多个标签,例如

/issues?labels=enhancement,nicetohave

您可以轻松修改以在 table 等中列出

const username = 'github_username'; // Set your username here
const password = 'github_password'; // Set your password here
const repoPath = "organization/repo" // Set your Repo path e.g. microsoft/typescript here

$(document).ready(function() {
    $.ajax({
        url: `https://api.github.com/repos/${repoPath}/issues`,
        type: "GET",
        crossDomain: true,
        // Send basic authentication header.
        beforeSend: function (xhr) {
            xhr.setRequestHeader ("Authorization", "Basic " + btoa(username + ":" + password));
        },
        success: function (response) {
            console.log("Response:", response);
            alert(`${repoPath} issue list (first 10):\n - ` + response.slice(0,10).map(issue => issue.title).join("\n - "))
        },
        error: function (xhr, status) {
            alert("error: " + JSON.stringify(xhr));
        }
    });
});

下面是使用 jQuery 和 Github API 的 (public) 回购问题的片段列表:

(注意我们不在此处添加身份验证 header!)

const repoPath = "leachim6/hello-world" // 

$(document).ready(function() {
$.ajax({
    url: `https://api.github.com/repos/${repoPath}/issues`,
    type: "GET",
    crossDomain: true,
    success: function (response) {
        tbody = "";
        response.forEach(issue => {
            tbody += `<tr><td>${issue.number}</td><td>${issue.title}</td><td>${issue.created_at}</td><td>${issue.state}</td></tr>`;
        });
        $('#output-element').html(tbody);
    },
    error: function (xhr, status) {
        alert("error: " + JSON.stringify(xhr));
    }
});
});
<head>
<meta charset="utf-8">
<title>Issue Example</title>
<link rel="stylesheet" href="css/styles.css?v=1.0">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.4.1.min.js" crossorigin="anonymous"></script>
</head>
<body style="margin:50px;padding:25px">
<h3>Issues in Repo</h3>
<table class="table table-striped">
    <thead>
      <tr>
        <th scope="col">Issue #</th>
        <th scope="col">Title</th>
        <th scope="col">Created</th>
        <th scope="col">State</th>
      </tr>
    </thead>
    <tbody id="output-element">
    </tbody>
</table>
</body>