Uso de la API de GitHub list-issues-for-a-repository


9

Cuando va a GitHub, en Problemas, muestra todos los problemas abiertos como una página HTML. Nos gustaría implementar un panel que muestre todos los problemas en un repositorio, agrupados por etiquetas, incluidos aquellos problemas que no están etiquetados correctamente.

Esta es la API correspondiente list-issues-for-a-repository .

Si bien inicialmente estaba usando jQuery y Javascript, ahora estoy usando PHP para una prueba de concepto porque su manejo de sesión incorporado me permite usar la misma página para iniciar sesión, tener autenticación y devolución de llamada de GitHub y continuar. Pero no me importa, cualquier idioma está bien.

Me las arreglé para obtener acceso a la API de GitHub a través de OAUTH2, pero cuando obtengo la lista de repositorios https://api.github.com/orgs/{org}/repos, aparece como una matriz vacía.

Debido a que la /orgs/{org}/reposAPI devuelve una matriz vacía, por supuesto, la /repos/{org}/{repo}/issuesAPI correspondiente devolverá un error.

Editar : ¡Vea este seguimiento para una solución! Me alegro de que finalmente lo hice funcionar!

Respuestas:


7

Es una API de descanso. Debe llamar a algunos puntos finales mediante una solicitud Http. No sé qué idioma está tratando de usar, así que no puedo darle un buen ejemplo sobre cómo lograr esto. Si aún no sabe qué idioma usar, use el cartero para crear una llamada REST API a la API de Github.

Digamos que desea recuperar los problemas del repositorio de mecanografía de Microsoft. Debería llamar a este punto final de la API:

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

Note aquí que tengo que sustituir el :ownery :repovalor de la documentación de la que yo estoy tratando de conseguir.

Luego puede pasar algunos parámetros a la llamada para filtrar sus datos, por ejemplo, la etiqueta API.

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

Esto solo devolverá problemas etiquetados como API.

Estos son los conceptos básicos de cómo usar una API.


Gracias. Eso me llevó a la mitad del camino. Me está diciendo { "message": "Not Found", "documentation_url": "https://developer.github.com/v3/issues/#list-issues-for-a-repository" }, pero leí y esa es aparentemente la respuesta estándar cuando intento acceder a repositorios privados, por lo que investigo sobre OAuth, etc. FWIW, usando JavaScript en el marco jQuery.
Yimin Rong el

Probablemente lo hay, pero en este punto, no puedo enseñarte cómo funciona oauth. Hay muchos tutoriales en línea. Debo decir que no lo tomes a mal, pero este es un proyecto bastante grande para alguien con tu conocimiento de API. Solo quiero asegurarme de que sepas en qué te estás metiendo @YiminRong
Nicolas

Gracias. Obtuve OAUTH2 para trabajar, pero no devuelve la información esperada. Por favor, vea la edición en cuestión.
Yimin Rong el

4

Puede usar jQuery Ajax para acceder a la API de Github y agregar un encabezado de autenticación básico para autenticar (ver aquí ), se muestra un ejemplo a continuación, esto resolverá los problemas de un repositorio dado y mostrará los primeros 10 en una ventana de alerta.

Consulte la documentación sobre problemas de extracción aquí: https://developer.github.com/v3/issues/ para ver qué parámetros puede usar para filtrar, ordenar, etc.

Por ejemplo, puede obtener todos los problemas etiquetados como 'error' usando:

/issues?labels=bug

Esto puede incluir múltiples etiquetas, p. Ej.

/issues?labels=enhancement,nicetohave

Puede modificarlo fácilmente para incluirlo en una tabla, etc.

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

A continuación se muestra un fragmento de problemas de listado para un repositorio (público) usando jQuery y la API de Github:

(¡Tenga en cuenta que no agregamos un encabezado de autenticación aquí!)

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>


Gracias. Veré esto lo antes posible. Hasta ahora no recibo los resultados esperados utilizando OAuth2, y me di cuenta de una API https://api.github.com/authorizationsindicó que sólo se podía acceder con autorización básica: stdClass Object ( [message] => This API can only be accessed with username and password Basic Auth [documentation_url] => https://developer.github.com/v3 ). Entonces quizás esto funcione.
Yimin Rong el

La autenticación básica funciona para mí, usando mis credenciales de github. Si desea acceder a un repositorio público, puede comentar la sección antes de enviar.
Terry Lennox
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.