Как я могу получить список всех запросов на тягу для репо через API github?

Я хочу получить список всех запросов на pull при репо через API github. Я выполнил инструкции http://developer.github.com/v3/pulls/, но когда я запрашиваю '/repos/: owner/: repo/pulls', он последовательно возвращает меньше запросов на pull, чем показано на веб-сайт.

Например, когда я запрашиваю репортаж torvalds/linux, я получаю 9 запросов с открытым потоком (на сайте есть 14). Если я добавлю '? State = closed', я получаю другой набор из 11 закрытых запросов на вытягивание (сайт показывает около 20).

Кто-нибудь знает, где возникает это несоответствие, и если есть какой-либо способ получить полный список запросов на вытягивание для репо через API?

Ответ 1

Вы можете получить все запросы извлечения (закрытые, открытые, объединенные) через переменную state.

Просто установите state=all в запросе GET, например, this->

https://api.github.com/repos/:owner/:repo/pulls?state=all

Для получения дополнительной информации: проверьте таблицу параметров на https://developer.github.com/v3/pulls/#list-pull-requests

Редактировать: Согласно комментарию Томаша Воpipes:

значение по умолчанию для "per_page = 30". Максимум per_page = 100. Чтобы получить более 100 результатов, вам нужно назвать его несколькими пунктами: "& page = 1", "& page = 2"...

Ответ 2

PyGithub (https://github.com/PyGithub/PyGithub), библиотека Python для доступа к GitHub API v3, позволяет получать ресурсы, разбитые на страницы.

Например,

g = Github(login_or_token=$YOUR_TOKEN, per_page=100)
r = g.get_repo($REPO_NUMBER)

for pull in r.get_pulls('all'):
    # You can access pulls

См. документацию (http://pygithub.readthedocs.io/en/latest/index.html).

Ответ 3

  • Если вы хотите получить все запросы на вытягивание (коммитты, комментарии, проблемы и т.д.), вы должны использовать разбиение на страницы. https://developer.github.com/v3/#pagination

  • Запрос GET "pulls" будет возвращать только открытые запросы pull.

  • Если вы хотите получить все запросы pull, либо вы установите для параметра состояние, либо вы используете проблемы.

Дополнительная информация

Если вам нужны другие данные из Github, например, проблемы, вы можете идентифицировать pull-запросы из-за проблем, и затем вы можете получить каждый запрос на pull независимо от того, закрыты или открыты. Он также предоставит вам несколько дополнительных атрибутов (mergeable, merged, merge-commit-sha, nr коммитов и т.д.), Если проблема представляет собой запрос pull-запроса, он будет содержать этот атрибут. В противном случае это просто проблема.

Из API: https://developer.github.com/v3/pulls/#labels-assignees-and-milestones

"Каждый запрос на перенос является проблемой, но не каждая проблема - это запрос на перенос. По этой причине в API проблем предоставляются" общие "действия для обеих функций, такие как манипулирование правопреемниками, метки и этапы."

Изменить. Я просто обнаружил, что проблемы ведут себя аналогично pull-запросам, поэтому нужно было бы восстановить все, установив параметр состояния на все

Ответ 4

Есть способ получить полный список, и вы это делаете. Что вы используете для связи с API? Я подозреваю, что вы не можете делать что-то правильно. Например (в настоящее время всего 13 запросов на открытие) с использованием моей API-оболочки (github3.py). Я получаю все запросы на открытые запросы. Пример того, как это сделать без моей оболочки в python, это:

import requests
r = requests.get('https://api.github.com/repos/torvalds/linux/pulls')
len(r.json()) == 13

и я также могу получить этот результат (неопределенно) в cURL, посчитав результаты сам: curl https://api.github.com/repos/torvalds/linux/pulls.

Если вы, однако, запустите в репозиторий с более чем 25 (или 30) запросами на pull, которые имеют совершенно другую проблему, но, скорее всего, это не то, с чем вы сейчас сталкиваетесь.

Ответ 6

GitHub предоставляет заголовок "Link", который указывает предыдущий, следующий и последний URL для получения значений. Например, ответ заголовка ссылки, <https://api.github.com/repos/:owner/:repo/pulls?state=all&page=2>; rel="next", <https://api.github.com/repos/:owner/:repo/pulls?state=all&page=15>; rel="last" rel= "next" предлагает следующий набор значений.