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


9

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

这是相应的存储库列表问题API

当我最初使用jQuery和Javascript时,现在使用PHP进行概念验证,因为其内置的会话处理功能使我可以使用同一页面登录,让GitHub进行身份验证和回调并继续。但这对我来说并不重要,任何语言都可以。

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

因为/orgs/{org}/reposAPI返回一个空数组,所以相应的/repos/{org}/{repo}/issuesAPI 当然会返回一个错误。

编辑:请参阅此后续解决方案!很高兴我终于可以正常工作了!

Answers:


7

这是一个REST API。您需要使用Http请求来调用某些终结点。我不知道您要使用哪种语言,因此我无法为您提供实现此目标的良好示例。如果您尚不知道要使用哪种语言,请使用邮差创建对github API的REST API调用。

假设您要检索Microsoft的Typescript存储库的问题,则需要调用以下API端点:

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

请注意,在这里,我已经替换了我要获取的文档的:owner:repo值。

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

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

这只会返回标记为的问题API

这是如何使用API​​的基础。


谢谢。那使我在那里。这是在告诉我{ "message": "Not Found", "documentation_url": "https://developer.github.com/v3/issues/#list-issues-for-a-repository" },但是我读了一下,这显然是尝试访问私有存储库时的标准响应,因此请在jQuery框架下使用JavaScript研究OAuth等FWIW。
民荣

可能有,但是在这一点上,我无法教您oauth的工作方式。在线上有很多教程。我必须说,不要采取这种错误的方式,但这对于知道您的API的人来说是一个很大的项目。我只想确保您知道您进入@YiminRong
Nicolas

谢谢。我已经开始使用OAUTH2,但是它没有返回预期的信息。请查看有问题的编辑。
荣毅民

4

您可以使用jQuery Ajax访问Github API并添加基本身份验证标头进行身份验证(请参见此处),如下所示,该示例将提取给定回购的问题并在警报窗口中显示前10个问题。

在此处查看有关拉出问题的文档:https : //developer.github.com/v3/issues/以查看可用于过滤,排序等的参数。

例如,您可以使用以下命令获取所有标记为“错误”的问题:

/issues?labels=bug

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

/issues?labels=enhancement,nicetohave

您可以轻松地修改以在表格等中列出。

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的(公共)仓库的问题:

(请注意,我们不在此处添加身份验证标头!)

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>


谢谢。我将尽快查看。我使用OAUTH2未能获得预期的结果,并且我注意到一个API https://api.github.com/authorizations指出只有使用基本授权才能访问它stdClass Object ( [message] => This API can only be accessed with username and password Basic Auth [documentation_url] => https://developer.github.com/v3 )。所以也许这行得通。
荣毅民

基本认证对我有效,使用我的github凭据。如果您想访问公共仓库,可以注释出beforeSend部分!
特里·伦诺克斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.