Szukam odpowiedniej dla mnie biblioteki Pythona dla Github APIv3.
Znalazłem jedną bibliotekę (python-github3) wspomnianą w dokumentacji GH API . Po zabawie w ipythonie przez godzinę lub dwie stwierdziłem, że odkrywanie / praca z nim jest naprawdę nieintuicyjne. Rozejrzałem się trochę i stwierdziłem, że jest przynajmniej całkiem sporo osób, które próbują napisać taką bibliotekę. Bardziej obiecująco wyglądające (na pierwszy rzut oka) są PyGithub i kolejny python-github3 , który najwyraźniej różni się od pierwszego.
Zanim spędzę kolejne dni na wypróbowywaniu biblioteki po bibliotece, chciałem zapytać społeczność SO, czy istnieje akceptowany, ostateczny i oczywisty wybór dla tej biblioteki?
To, co mi się nie podobało w pierwszej bibliotece, to (dla mnie) nieintuicyjny sposób na dotarcie do danych - niektóre rzeczy otrzymujesz jako atrybuty, inne jako wartość zwracaną metody, ta wartość zwracana to jakiś skomplikowany obiekt, który musi być stronicowane i iterowane itp.
Pod tym względem PyGithub na pierwszy rzut oka wygląda atrakcyjniej - przejrzyj wyraźnie hierarchię obiektów, a następnie uzyskaj atrybut zawierający to, co chcesz:
for repo in g.get_user().get_repos():
print repo.name
Czy są więc jakieś perełki mądrości, którymi można się podzielić? Wiem, że nie mam wystarczających umiejętności, aby szybko ocenić jakość biblioteki, dlatego zwracam się do społeczności SO.
edit: fwiw, skończyło się na PyGithub . Działa dobrze, a autor jest bardzo otwarty na opinie i raporty o błędach. :-)
Odpowiedzi:
Ponieważ wspomniałeś, że jesteś początkującym programistą Pythona, sugerowałbym, abyś najpierw spróbował użyć API JSON bez żadnej biblioteki Github. To naprawdę nie jest takie trudne i pomoże ci to znacznie później w życiu programistycznym, ponieważ to samo podejście można zastosować do dowolnego interfejsu API JSON. Zwłaszcza jeśli wydaje się, że wypróbowanie bibliotek zajmie kilka dni.
Nie mówię, że niektóre biblioteki nie są łatwiejsze w użyciu, mówię tylko, że mały dodatkowy wysiłek związany z bezpośrednim używaniem API może być tego wart na dłuższą metę. Przynajmniej pomoże ci to zrozumieć, dlaczego niektóre z tych bibliotek wydają się „nieintuicyjne” (jak powiedziałeś).
Prosty przykład pobierania czasu utworzenia repozytorium 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']
Używa popularnej biblioteki żądań . W swoim kodzie będziesz oczywiście musiał zająć się również przypadkami błędów.
Jeśli potrzebujesz dostępu z uwierzytelnianiem, będzie to nieco bardziej złożone.
źródło
requests
, której wcześniej nie spotkałem. Wygląda fajnie.r.content
, a nier.text
(obiekt 'Response' nie ma atrybutu 'text')r.text
powinien działać, jeśli odpowiedź to JSON.r.content
zwraca bajty bezpośrednio bez ich dekodowania. Wydaje się, że biblioteka żądań wewnętrznie używa(r.text or r.content)
frazy, być może powinieneś to zrobić. Nie jestem pewien, dlaczego nie możesz zobaczyćtext
nieruchomości.AttributeError: 'Response' object has no attribute 'text'
json.loads(r.content or r.text)
w redagowanym, to działa przy okazji.W końcu użyłem PyGithub . Działa dobrze, a autor jest bardzo otwarty na opinie i raporty o błędach. :-)
(Dostosowane z mojej zmiany do oryginalnego pytania, dla lepszej widoczności)
źródło
Dokumentacja jest okropna dla PyGitHub, ale produkt jest świetny. Oto krótka próbka faktycznego pobierania pliku, zmieniania go z nowym komentarzem na początku pliku i zatwierdzania go z powrotem
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)
źródło
Libsa jest świetna dla początkujących. Ma ładną dokumentację i jest łatwy w użyciu, patrz przykład . Zapraszam do udziału.
źródło