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


9

GitHubに移動すると、[Issues]の下で、未解決のすべての問題がHTMLページとして表示されます。正しくラベル付けされていない問題を含む、ラベルでグループ化されたリポジトリ内のすべての問題を表示するダッシュボードを実装したいと思います。

これは、対応するlist-issues-for-a-repository APIです。

最初はjQueryとJavascriptを使用していましたが、組み込みのセッション処理により同じページを使用してログインし、GitHubに認証とコールバックを行わせて続行できるため、今では概念実証にPHPを使用しています。しかし、それは私には関係ありません、どんな言語でも大丈夫です。

私はなんとかOAUTH2を介してGitHub APIにアクセスできましたが、リポジトリのリストを取得https://api.github.com/orgs/{org}/reposすると、空の配列として表示されます。

/orgs/{org}/reposAPIは空の配列を返すため、もちろん、対応する/repos/{org}/{repo}/issuesAPIはエラーを返します。

編集:解決策については、このフォローアップを参照してください!やっと動作しました!

回答:


7

REST APIです。Httpリクエストを使用していくつかのエンドポイントを呼び出す必要があります。私はあなたがどの言語を使おうとしているのかわからないので、これを達成する方法の良い例を示すことはできません。使用する言語がまだわからない場合は、postmanを使用してgithub APIへのREST API呼び出しを作成します。

マイクロソフトの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に何を入れているかをあなたが知っていることを確認したいだけです
ニコラス

ありがとうございました。OAUTH2を動作させましたが、期待した情報が返されません。問題の編集をご覧ください。
Yimin Rong

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を使用しても期待どおりの結果が得られず、1つの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.