Найбільш підходяща бібліотека 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. Це працює добре, і автор справді сприйнятливий до відгуків та повідомлень про помилки. :-)
Крістоф

Я відсортував усі альтернативи за зірками на 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(об'єкт "Відповідь" не має атрибута "текст")
Крістоф,

@Christoph r.textповинен працювати, якщо відповідь JSON. r.contentповертає байти безпосередньо без їх декодування. Здається, бібліотека запитів використовує (r.text or r.content)фразу внутрішньо , можливо, вам теж слід це зробити. Я не впевнений, чому ви не можете побачити textвласність.
Лича

Ну, я не знаю, що відбувається, але я помістив ваш оригінальний приклад у 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.