Используя GitHub API list-questions-for-a-repository - не вижу репозитории - теперь даже не могу войти - PullRequest
8 голосов
/ 01 ноября 2019

Когда вы заходите на GitHub в разделе «Проблемы», он отображает все открытые проблемы в виде HTML-страницы. Мы хотели бы реализовать панель инструментов, отображающую все проблемы в хранилище, сгруппированные по меткам, включая те, которые не имеют правильной метки.

Я думаю Это соответствующий API списочных проблем для репозитория . но не понятно, как его использовать. В нем есть примечание, что API находится на предварительном просмотре и может изменяться без уведомления, возможно, объясняя недостаток документации. Кто-нибудь имел успех, используя этот API?

Редактировать:

Хотя я изначально использовал jQuery и Javascript, сейчас я использую PHP для проверкиконцепция, потому что его встроенная обработка сеансов позволяет мне использовать ту же страницу для входа в систему, иметь GitHub для аутентификации и обратного вызова, и продолжить. Но это не важно для меня, любой язык в порядке.

Мне удалось получить доступ к GitHub API через OAUTH2, но когда я получаю список репозиториев через https://api.github.com/orgs/{org}/repos, он выглядит какпустой массив.

API-интерфейсы, которые работают для меня, в том смысле, что они не возвращают ошибки:

https://api.github.com/emojis
https://api.github.com/events
https://api.github.com/feeds
https://api.github.com/gists
https://api.github.com/gists/public
https://api.github.com/orgs/{org}
https://api.github.com/orgs/{org}/events
https://api.github.com/orgs/{org}/members
https://api.github.com/orgs/{org}/public_members
https://api.github.com/orgs/{org}/repos ← but returns empty array
https://api.github.com/rate_limit
https://api.github.com/user
https://api.github.com/user/emails
https://api.github.com/user/followers
https://api.github.com/user/following
https://api.github.com/user/orgs
https://api.github.com/user/repos
https://api.github.com/users/{user}

Поскольку API /orgs/{org}/repos возвращает пустой массив, конечносоответствующий /repos/{org}/{repo}/issues API вернет ошибку.

Через веб-сайт GitHub я могу зайти на домашнюю страницу организации и просмотреть список всех репозиториев, иметь доступ на чтение / запись к одному из репозиториев организации. и только для чтения другому, но ни один из них не отображается через GitHub API. Нужно ли быть администратором организации, чтобы хотя бы перечислить эти репозитории?

Редактировать:

Обнаружил, что мне нужно установить область действия repo иотправьте запрос на заявку на доступ к репозиториям организации! Это, наверное, последний кусок. Отправлено, теперь ожидает.

Редактировать:

Установить область и был предоставлен доступ, но теперь авторизация ничего не возвращает, т.е. access_tokennull. Расследование ...

Редактировать:

Я подозреваю, что я делал это неправильно с самого начала. Я настроил приложение OAuth, но теперь думаю, что мне нужно приложение GitHub. Даже с блок-схемой это все еще неясно из-за субъективной природы некоторых из квалификаторов, например, «простые» и «сложные» приложения, действительно ли приложение «доступ ко всему» имеет доступ ко всему и т. Д.

Так что, извините читателей, надеющихся, что я выйду с чем-то полезным, не увенчался успехом. Я уже потратил слишком много времени на это и не могу больше выделять средства, может позже смогу вернуться.

Ответы [ 2 ]

7 голосов
/ 04 ноября 2019

Это API отдыха. Вам нужно вызвать некоторые конечные точки, используя запрос Http. Я не знаю, какой язык вы пытаетесь использовать, поэтому я не могу дать вам хороший пример того, как этого добиться. Если вы еще не знаете, какой язык использовать, используйте почтальон , чтобы создать вызов API REST для API github.

Допустим, вы хотите разрешить проблемы с репозиторием от Microsoft . Вам нужно вызвать эту конечную точку API:

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

Обратите внимание, что у меня есть замена:owner и :repo значение документации для той, которую я пытаюсь получить.

Затем вы можете передать некоторые параметры в вызов для фильтрации ваших данных, например, метку API.

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

Это вернет только проблемы, помеченные как API.

Это основы использования API.

4 голосов
/ 06 ноября 2019

Вы можете использовать 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>
...