Sử dụng API danh sách các vấn đề của GitHub


9

Khi bạn truy cập GitHub, trong phần Sự cố, nó sẽ hiển thị tất cả các sự cố mở dưới dạng trang HTML. Chúng tôi muốn triển khai bảng điều khiển hiển thị tất cả các sự cố trong kho lưu trữ, được nhóm theo nhãn, bao gồm các sự cố không được gắn nhãn chính xác.

Đây là tương ứng API danh sách các vấn đề cho kho lưu trữ .

Mặc dù ban đầu tôi sử dụng jQuery và Javascript, nhưng hiện tại tôi đang sử dụng PHP cho một bằng chứng khái niệm vì việc xử lý phiên tích hợp của nó cho phép tôi sử dụng cùng một trang để đăng nhập, xác thực & gọi lại GitHub và tiếp tục. Nhưng nó không thành vấn đề với tôi, bất kỳ ngôn ngữ nào cũng được.

Tôi đã quản lý để có quyền truy cập vào API GitHub qua OAUTH2, nhưng khi tôi nhận được danh sách các kho lưu trữ thông qua https://api.github.com/orgs/{org}/repos nó sẽ xuất hiện dưới dạng một mảng trống.

/orgs/{org}/reposAPI trả về một mảng trống, tất nhiên /repos/{org}/{repo}/issuesAPI tương ứng sẽ trả về lỗi.

Chỉnh sửa : Xem theo dõi này cho một giải pháp! Vui mừng cuối cùng tôi đã làm cho nó hoạt động!

Câu trả lời:


7

Đây là một API còn lại. Bạn cần gọi một số điểm cuối bằng cách sử dụng yêu cầu http. Tôi không biết ngôn ngữ nào bạn đang cố sử dụng vì vậy tôi không thể cho bạn một ví dụ hay về cách đạt được điều này. Nếu bạn chưa biết sử dụng ngôn ngữ nào, hãy sử dụng người đưa thư để tạo lệnh gọi API REST đến API github.

Giả sử bạn muốn truy xuất các vấn đề của repo bản in của microsoft , Bạn sẽ cần gọi điểm cuối API này:

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

Lưu ý ở đây là tôi đã thay thế :owner:repo giá trị của tài liệu cho tài liệu tôi đang cố gắng lấy.

Sau đó, bạn có thể chuyển một số tham số cho lệnh gọi để lọc dữ liệu của mình, ví dụ: nhãn API.

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

Điều này sẽ chỉ trả lại các vấn đề được dán nhãn là API .

Đây là những điều cơ bản về cách sử dụng API.


Cảm ơn bạn. Điều đó đã cho tôi một phần cách đó. Nó nói với tôi { "message": "Not Found", "documentation_url": "https://developer.github.com/v3/issues/#list-issues-for-a-repository" }, nhưng tôi đã đọc và đó rõ ràng là phản hồi tiêu chuẩn khi cố gắng truy cập các repos riêng, vì vậy hãy nghiên cứu về OAuth, v.v. FWIW, sử dụng JavaScript trong khung jQuery.
Yimin Rong

Có lẽ là có, nhưng tại thời điểm này, tôi không thể dạy cho bạn cách hoạt động của oauth. Có rất nhiều hướng dẫn trực tuyến. Tôi phải nói rằng, đừng hiểu sai về điều này, nhưng đây là một dự án khá lớn cho những người có kiến ​​thức về API của bạn. Tôi chỉ muốn chắc chắn rằng bạn biết những gì bạn đang tham gia @YiminRong
Nicolas

Cảm ơn bạn. Tôi đã nhận được OAUTH2 để làm việc, nhưng nó không trả lại thông tin dự kiến. Xin vui lòng xem chỉnh sửa trong vấn đề.
Yimin Rong

4

Bạn có thể sử dụng jQuery Ajax để truy cập API Github và thêm tiêu đề xác thực cơ bản để xác thực (xem tại đây ), một ví dụ được hiển thị bên dưới, điều này sẽ kéo các vấn đề cho một repo nhất định và hiển thị 10 đầu tiên trong cửa sổ cảnh báo.

Xem tài liệu về các vấn đề kéo ở đây: https://developer.github.com/v3/issues/ để xem bạn có thể sử dụng tham số nào để lọc, sắp xếp, v.v.

Ví dụ: bạn có thể nhận được tất cả các vấn đề được dán nhãn 'bug' bằng cách sử dụng:

/issues?labels=bug

Điều này có thể bao gồm nhiều nhãn, ví dụ

/issues?labels=enhancement,nicetohave

Bạn có thể dễ dàng sửa đổi để liệt kê trong một bảng, vv

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));
        }
    });
});

Dưới đây là một vấn đề liệt kê đoạn trích cho một repo (công khai) bằng cách sử dụng jQuery và API Github:

(Lưu ý chúng tôi không thêm tiêu đề xác thực ở đây!)

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>


Cảm ơn bạn. Tôi sẽ xem xét điều này càng sớm càng tốt. Tôi không nhận được kết quả như mong đợi khi sử dụng OAUTH2 và tôi nhận thấy một API https://api.github.com/authorizationschỉ ra rằng nó chỉ có thể được truy cập với ủy quyền cơ bản : stdClass Object ( [message] => This API can only be accessed with username and password Basic Auth [documentation_url] => https://developer.github.com/v3 ). Vì vậy, có thể điều này sẽ làm việc.
Yimin Rong

Xác thực cơ bản hoạt động với tôi, sử dụng thông tin đăng nhập github của tôi. Nếu bạn muốn truy cập một repo công khai, bạn có thể bình luận phần beforeSend!
Terry Lennox
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.