리포지토리 용 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.