Наиболее подходящая библиотека Python для Github API v3 [закрыто]


85

Я ищу подходящую для меня библиотеку Python для Github APIv3.

Я нашел одну библиотеку (python-github3), упомянутую в документации GH API . Поигравшись с ним в ipython в течение часа или двух, я обнаружил, что это действительно неинтуитивно для изучения / работы. Я посмотрел еще немного и обнаружил, что довольно много людей хотя бы пытаются написать такую ​​библиотеку. Более перспективными (на первый взгляд) являются PyGithub и еще один python-github3 , который, по всей видимости, отличается от первого.

Прежде чем я потрачу следующие дни на то, чтобы последовательно пробовать библиотеку за библиотекой, я хотел спросить сообщество SO, есть ли принятый, окончательный и очевидный выбор для этой библиотеки?

Что мне не нравилось в первой библиотеке, так это (для меня) неинтуитивный способ получения данных - некоторые вещи вы получаете как атрибуты, некоторые вы получаете как возвращаемое значение метода, это возвращаемое значение представляет собой какой-то сложный объект, который должен постранично и повторять и т. д.

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

for repo in g.get_user().get_repos(): print repo.name

Итак, есть ли чем поделиться жемчужинами мудрости? Я знаю, что у меня недостаточно навыков, чтобы быстро оценить качество библиотеки, поэтому я обращаюсь к сообществу SO.

edit: fwiw, в итоге я использовал PyGithub . Он работает хорошо, и автор очень внимателен к отзывам и сообщениям об ошибках. :-)


Возможно, стоит спросить кого-нибудь из команды github.
Daenyth

6
fwiw, в итоге я использовал PyGithub. Он работает хорошо, и автор очень внимателен к отзывам и сообщениям об ошибках. :-)
Christoph

Я отсортировал все альтернативы по звездам на GitHub, сравнил результаты с этим ответом и выбрал PyGithub. Поддерживает Python 3, кажется, он хорошо документирован ... У меня нет времени пробовать их все, и нет другого способа принять решение.
astrojuanlu

Ответы:


76

Поскольку вы упомянули, что являетесь начинающим программистом на Python, я предлагаю вам сначала попробовать использовать JSON API без какой-либо библиотеки Github. Это действительно не так уж и сложно, и это поможет вам намного позже в вашей жизни программирования, поскольку тот же подход можно применить к любому JSON API. Особенно, если кажется, что тестирование библиотек займет несколько дней.

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

Простой пример получения времени создания репозитория django:

import requests
import json
r = requests.get('https://api.github.com/repos/django/django')
if(r.ok):
    repoItem = json.loads(r.text or r.content)
    print "Django repository created: " + repoItem['created_at']

Используется популярная библиотека запросов . В вашем коде вам, естественно, также потребуется обрабатывать случаи ошибок.

Если вам нужен доступ с аутентификацией, это будет немного сложнее.


11
+1 за упоминание requests, чего я раньше не встречал. Отлично выглядит.
larsks

кстати, это должно быть r.content, а не r.text(объект 'Response' не имеет атрибута 'text')
Кристоф

@Christoph r.textдолжен работать, если ответ JSON. r.contentвозвращает байты напрямую, не декодируя их. Библиотека запросов, кажется, внутренне использует (r.text or r.content)фразу, возможно, вам тоже стоит это сделать. Я не уверен, почему вы не видите textсобственность.
Lycha

Ну, я не знаю, что происходит, но я поместил ваш исходный пример в ipython как есть (за исключением исправления искаженных отступов) и получилAttributeError: 'Response' object has no attribute 'text'
Кристоф

Если я скажу json.loads(r.content or r.text)в отредактированном, он работает, кстати.
Кристоф

31

В итоге я остановился на PyGithub . Он работает хорошо, и автор очень внимателен к отзывам и сообщениям об ошибках. :-)

(Адаптировано из моего редактирования к исходному вопросу для большей наглядности)


15

Документация для PyGitHub ужасна, но продукт отличный. Вот краткий пример фактического получения файла, изменения его с помощью нового комментария в начале файла и его повторной фиксации.

from github import Github
gh = Github(login_or_token='.....', base_url='...../api/v3')
user = gh.get_user()
repo = user.get_repo("RepoName")
file = repo.get_file_contents("/App/forms.py")
decoded_content = "# Test " + "\r\n" + file.decoded_content
repo.update_file("/"RepoName"/forms.py", "Commit Comments", decoded_content, file.sha)

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

2
Спасибо за этот пример, я не понимаю, как кто-то может тратить месяцы на разработку своего проекта и не утруждает себя написанием пары абзацев, описывающих, как его использовать.
serg

Я обнаружил, что документация на pygithub.readthedocs.io/en/latest хорошо подходит для того, что мне нужно было сделать. Документация, возможно, не поддерживается в хорошем состоянии для последних функций, и, возможно, она не содержит всех примеров, которые я хотел (об остальном позаботился Google), но у меня это сработало.
aschultz

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.