Github API v3 için en uygun python kitaplığı [kapalı]


86

Benim için uygun Github APIv3 için bir python kitaplığı arıyorum.

GH API belgelerinde belirtilen bir kitaplık (python-github3) buldum . Bir veya iki saat ipython'da onunla oynadıktan sonra, keşfetmeyi / çalışmayı gerçekten mantıksız buldum. Biraz daha baktım ve en azından böyle bir kitaplık yazmaya çalışan çok sayıda insan olduğunu gördüm. Daha umut verici görünen (bir bakışta) PyGithub ve görünüşe göre ilkinden farklı olan başka bir python-github3'tür .

Sonraki günleri ard arda kütüphaneyi deneyerek geçirmeden önce, SO topluluğuna bu kütüphane için kabul edilmiş, kesin ve açık bir seçim olup olmadığını sormak istedim.

İlk kitaplıktan hoşlanmadığım şey, verilere ulaşmanın (bana göre) sezgisel olmayan yoluydu - bazı şeyler öznitelik olarak elde edersiniz, bazılarını bir yöntemin dönüş değeri olarak alırsınız, bu dönüş değeri, bazı karmaşık nesnelerdir. sayfalandırılmalı ve tekrarlanmalı vb.

Bu bağlamda, PyGithub ilk bakışta daha çekici görünüyor - bir nesne hiyerarşisini net bir şekilde inceleyin ve ardından istediğiniz şeyi içeren özelliğe ulaşın:

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

Peki, paylaşacak bilgelik incileri var mı? Kütüphane kalitesini hızlı bir şekilde yargılayacak kadar becerim olmadığını biliyorum, bu yüzden SO topluluğuna dönüyorum.

edit: fwiw, PyGithub'ı kullandım . İyi çalışıyor ve yazar, geri bildirim ve hata raporlarına gerçekten açık. :-)


Bazı github ekibine sormaya değer olabilir.
Daenyth

6
fwiw, PyGithub'ı kullanmayı bıraktım. İyi çalışıyor ve yazar, geri bildirim ve hata raporlarına gerçekten açık. :-)
Christoph

GitHub'da tüm alternatifleri yıldızlara göre sıraladım, sonuçları bu cevapla karşılaştırdım ve PyGithub'ı seçtim. Python 3'ü destekliyor, iyi belgelenmiş gibi görünüyor ... Hepsini deneyecek vaktim yok ve kararımı vermenin başka yolu yok.
astrojuanlu

Yanıtlar:


77

Yeni başlayan bir python programcısı olduğunuzdan bahsettiğiniz için, önce JSON API'yi herhangi bir Github kitaplığı olmadan kullanmayı denemenizi öneririm. Gerçekten o kadar zor değil ve programlama hayatınızın ilerleyen dönemlerinde size çok yardımcı olacak, çünkü aynı yaklaşım herhangi bir JSON API'ye uygulanabilir. Özellikle de kütüphaneleri denemek günler alacak gibi görünüyorsa.

Bazı kitaplıkların kullanımının daha kolay olmadığını söylemiyorum, sadece API'yi doğrudan kullanmak için küçük bir ekstra çabanın uzun vadede buna değebileceğini söylüyorum. En azından bu kütüphanelerden bazılarının neden "mantıksız" göründüğünü anlamanıza yardımcı olacaktır (sizin de söylediğiniz gibi).

Django deposunun oluşturma zamanını almak için basit bir örnek:

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']

Bu, popüler istekler kitaplığını kullanıyor . Kodunuzda doğal olarak hata durumlarını da ele almanız gerekir.

Kimlik doğrulama ile erişime ihtiyacınız varsa, biraz daha karmaşık olacaktır.


11
requestsDaha önce karşılaşmadığım bahsettiğim için +1 . Şık görünüyor.
larsks

btw, bu olmamalı r.content, değil r.text('Yanıt' nesnesinin 'metin' niteliği yoktur)
Christoph

r.textYanıt JSON ise @Christoph çalışmalıdır. r.contentbaytları kodlarını çözmeden doğrudan döndürür. İstekler kitaplığı dahili olarak (r.text or r.content)ifade kullanıyor gibi görünüyor , belki bunu da yapmalısınız. textMülkü neden göremediğinden emin değilim .
Lycha

Neler olduğunu bilmiyorum, ama orijinal örneğinizi olduğu gibi ipython'a koydum (karıştırılmış girintiyi düzeltmek dışında) ve anladımAttributeError: 'Response' object has no attribute 'text'
Christoph

json.loads(r.content or r.text)Düzenlenen birinde dersem , btw çalışıyor.
Christoph

32

Sonunda PyGithub'ı kullanmaya başladım . İyi çalışıyor ve yazar, geri bildirim ve hata raporlarına gerçekten açık. :-)

(Daha iyi görünürlük için düzenlememden orijinal soruya uyarlandı)


15

PyGitHub için dokümantasyon korkunç, ancak ürün harika. İşte bir dosyayı gerçekten almak, dosyanın başlangıcında yeni bir yorumla değiştirmek ve onu geri kaydetmek için hızlı bir örnek.

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
Bu mu? Bunu yıllardır kullanmadım, ama afaik hala devam ediyor - bununla ilgili bir sorun olabilir mi? PyGithub, orijinal yaratıcının artık zamanının olmadığı ve gönüllüler istediği başarılı bir bakım teslimine birkaç örnekten biridir .
Christoph

2
Bu örnek için teşekkürler, birinin projesini geliştirmek için nasıl aylar harcayabileceğini anlamıyorum ve nasıl kullanılacağını açıklayan birkaç paragraf yazma zahmetine girmiyorum.
serg

Pygithub.readthedocs.io/en/latest adresindeki dokümantasyonun yapmam gereken şey için iyi çalıştığını gördüm. Belgeler, en son özellikler için iyi korunmamış olabilir ve istediğim tüm örnekleri içermemiş olabilir (gerisini Google halletti, ancak benim için iyi çalıştı.
aschultz

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.