Я ищу подходящую для меня библиотеку 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 . Он работает хорошо, и автор очень внимателен к отзывам и сообщениям об ошибках. :-)
Ответы:
Поскольку вы упомянули, что являетесь начинающим программистом на 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']
Используется популярная библиотека запросов . В вашем коде вам, естественно, также потребуется обрабатывать случаи ошибок.
Если вам нужен доступ с аутентификацией, это будет немного сложнее.
источник
requests
, чего я раньше не встречал. Отлично выглядит.r.content
, а неr.text
(объект 'Response' не имеет атрибута 'text')r.text
должен работать, если ответ JSON.r.content
возвращает байты напрямую, не декодируя их. Библиотека запросов, кажется, внутренне использует(r.text or r.content)
фразу, возможно, вам тоже стоит это сделать. Я не уверен, почему вы не видитеtext
собственность.AttributeError: 'Response' object has no attribute 'text'
json.loads(r.content or r.text)
в отредактированном, он работает, кстати.В итоге я остановился на PyGithub . Он работает хорошо, и автор очень внимателен к отзывам и сообщениям об ошибках. :-)
(Адаптировано из моего редактирования к исходному вопросу для большей наглядности)
источник
Документация для 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)
источник
Libsaas отлично подходит для новичков. У него хорошая документация, и он прост в использовании, см. Пример . Не стесняйтесь вносить свой вклад.
источник