리포지토리 용 GitHub 목록 문제 API 사용


9

GitHub로 이동하면 이슈 아래에 열려있는 모든 이슈가 HTML 페이지로 표시됩니다. 레이블이 올바르게 분류되지 않은 문제를 포함하여 레이블로 그룹화 된 저장소의 모든 문제를 표시하는 대시 보드를 구현하려고합니다.

이는 해당 리포지토리 목록 문제 API 입니다.

jQuery와 Javascript를 처음 사용하는 동안 내장 된 세션 처리를 통해 동일한 페이지를 사용하여 로그인하고 GitHub를 인증 및 콜백하고 계속할 수 있으므로 개념 증명을 위해 PHP를 사용하고 있습니다. 그러나 그것은 중요하지 않습니다. 모든 언어는 괜찮습니다.

OAUTH2를 통해 GitHub API에 액세스 할 수 있었지만 저장소 목록을 가져 https://api.github.com/orgs/{org}/repos오면 빈 배열로 나타납니다.

/orgs/{org}/reposAPI는 빈 배열을 반환 하기 때문에 물론 해당 /repos/{org}/{repo}/issuesAPI는 오류를 반환합니다.

편집 : 솔루션에 대한 후속 조치 를 참조하십시오 ! 마침내 작동하게되어 기쁩니다!

답변:


7

나머지 API입니다. Http 요청을 사용하여 일부 엔드 포인트를 호출해야합니다. 어떤 언어를 사용하려고하는지 모르므로이를 달성하는 방법에 대한 좋은 예를 제시 할 수 없습니다. 사용할 언어를 모르는 경우 postman 을 사용하여 github API에 대한 REST API 호출을 작성하십시오.

Microsoft의 typescript repo 문제를 검색하고 싶다면 이 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를 연구합니다.
Yimin Rong

아마도있을 것입니다,하지만 지금은 oauth 작동 방식을 가르쳐 줄 수 없습니다. 온라인으로 많은 튜토리얼이 있습니다. 나는 이것을 잘못 받아들이지 말아야하지만 API에 대한 지식이있는 사람에게는 큰 프로젝트입니다. 나는 당신이 @YiminRong에 들어가는 것을 알고 싶습니다.
Nicolas

감사합니다. 작동하도록 OAUTH2를 받았지만 예상 정보를 반환하지 않습니다. 문제 수정을 참조하십시오.
Yimin Rong

4

jQuery Ajax를 사용하여 Github API에 액세스하고 인증을 위해 기본 인증 헤더를 추가 할 수 있습니다 ( 여기 참조 ). 아래에 예제가 표시되어 있습니다. 그러면 지정된 리포지토리에 대한 문제가 발생하고 경고 창에 처음 10 개가 표시됩니다.

https://developer.github.com/v3/issues/ 에서 문제를 가져 오는 방법에 대한 설명서 를 참조하여 필터링, 정렬 등에 사용할 수있는 매개 변수를 확인하십시오.

예를 들어 다음을 사용하여 'bug'라고 표시된 모든 문제를 얻을 수 있습니다.

/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 ). 아마도 이것이 효과가있을 것입니다.
Yimin Rong

기본 인증은 내 github 자격 증명을 사용하여 작동합니다. 공개 리포지토리에 액세스하려면 beforeSend 섹션을 주석 처리하십시오!
Terry Lennox
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.