2013-07-02 15 views
12

Chcę uzyskać listę wszystkich żądań pobrania na repo za pośrednictwem interfejsu API github. Postępowałem zgodnie z instrukcjami pod numerem http://developer.github.com/v3/pulls/, ale kiedy wysyłam kwerendę "/ repos /: owner /: repo/pulls", jej ciągłe zwracanie mniejszej liczby żądań ściągnięcia niż jest wyświetlane na stronie internetowej.Jak mogę uzyskać listę wszystkich żądań pobrania dla repo za pośrednictwem interfejsu API github?

Na przykład, gdy wyślę zapytanie do repozytorium torvalds/linux, otrzymam 9 otwartych żądań ściągnięcia (na stronie znajduje się 14). Jeśli dodaję "? State = closed", otrzymam inny zestaw 11 zamkniętych żądań ściągnięcia (strona pokazuje około 20).

Czy ktoś wie, gdzie ta rozbieżność powstaje i czy istnieje sposób na uzyskanie pełnej listy żądań pobrania dla repo za pośrednictwem interfejsu API?

+0

Czy możesz jeszcze raz sprawdzić? Czy test, oczekiwany 19, dostał 19 – random

Odpowiedz

1

Istnieje sposób, aby uzyskać pełną listę i robisz to. Czego używasz do komunikacji z API? Podejrzewam, że możesz nie robić czegoś poprawnie. Na przykład (obecnie jest tylko 13 otwartych żądań ściągnięcia) przy użyciu mojego wrappera API (github3.py) otrzymuję wszystkie otwarte żądania ściągania. Przykładem, jak to zrobić bez mojej owijki w Pythonie jest:

import requests 
r = requests.get('https://api.github.com/repos/torvalds/linux/pulls') 
len(r.json()) == 13 

i mogę również uzyskać ten wynik (niejasno) w cURL przez zliczanie wyników sobie: curl https://api.github.com/repos/torvalds/linux/pulls.

Jeśli jednak trafisz do repozytorium z więcej niż 25 (lub 30) żądaniami pobierania, jest to zupełnie inny problem, ale z całą pewnością nie jest to coś, co teraz napotykasz.

+0

Czy istnieje sposób, aby uzyskać więcej niż 30 żądań wycofania dla repo? Może w różnych żądaniach sieci? – shreyj

+0

@ shreyj wiele punktów końcowych w interfejsie API GitHub jest podzielonych na strony i można uzyskać do nich dostęp za pomocą [nagłówków łącza] (http://developer.github.com/v3/#pagination) dotyczących odpowiedzi. Jeśli próbujesz użyć pythona lub ruby, aby złożyć wniosek, z pewnością mogę ci w tym pomóc. –

3
  1. Jeśli chcesz odzyskać wszystkie żądania ściągnięcia (zatwierdzenia, komentarze, problemy itp.), Musisz użyć stronicowania. https://developer.github.com/v3/#pagination

  2. Żądanie GET "ciągnie" zwróci tylko otwarte żądania przeciągnięcia.

  3. Jeśli chcesz uzyskać wszystkie żądania wyciągnięcia, ustaw stan parametru na wszystkie lub użyj problemów.

Dodatkowe informacje

Jeśli potrzebujesz innych danych z Github, takie jak kwestie, a następnie można zidentyfikować pull-wnioski z problemów, a można następnie pobrać każdy pull-wniosek bez względu na to, czy jest zamknięty lub otwarty. Daje ci również kilka dodatkowych atrybutów (scalanie, scalanie, scalanie-commit-sha, zatwierdzanie itd.). Jeśli problem jest żądaniem ciągnięcia, to będzie zawierał ten atrybut. W przeciwnym razie to tylko kwestia.

Od API:https://developer.github.com/v3/pulls/#labels-assignees-and-milestones

„Każda prośba przyciąganie jest problemem, ale nie każdy problem jest prośba przyciąganie Z tego powodu.«Shared»działania dla obu funkcji, takich jak manipulowanie nabywców praw, etykiet i kamienie milowe są dostarczane w ramach interfejsu API problemów. "

Edit Właśnie okazało się, że kwestie zachowuje się podobnie do pull-wnioski, więc należałoby zrobić odzyskać wszystko przez ustawienie parametru stanu wszystkich

+0

Czy możesz podać kod dla uzyskania wszystkich żądań ściągnięcia (z uwzględnieniem stanu "wszystko") –

+0

wybacz mi, że pytam, po prostu widzę, że jest dostarczany przez @akshaynagpal –

3

Możesz uzyskać wszystkie żądania wyciągnięcia (zamknięte, otwarte, połączone) poprzez zmienną state.

Wystarczy ustawić state=all w zapytaniu GET, jak to->

https://api.github.com/repos/:owner/:repo/pulls?state=all 

Aby uzyskać więcej informacji: sprawdź tabelę parametrów w https://developer.github.com/v3/pulls/#list-pull-requests

+0

jak odfiltrować tylko numer żądania ściągnięcia z uzyskanych wyników –

+0

Mój problem polega na tym, że jeśli I GET? State = all, daje mniejszą liczbę niż? State = closed +? State = open – Akabelle

Powiązane problemy