2015-11-19 13 views
9

Sto cercando di ottenere tutti i contributori di un repository utilizzando questo github api.Come recuperare tutti i contributori di un repository utilizzando github api

Se non sbaglio, mi dice anche che se ci sono più di 500 contributori per un repository, ne dà solo 500 e il resto è contrassegnato come anonimo.

Per motivi di prestazioni, solo i primi 500 indirizzi di posta elettronica dell'autore nel repository saranno collegati agli utenti di GitHub.

Questo repo linux kernel ha 5k + collaboratori, come per l'API dovrei ottenere almeno 500 collaboratori tramite l'API.

Quando faccio curl -I https://api.github.com/repos/torvalds/linux/contributors?per_page=100

ottengo solo 3 pagine (per_page = 100) in modo da ottenere> 300 collaboratori. (Guardare "link" intestazione)

C'è un modo per ottenere tutti i collaboratori del repository (5000+)?

HTTP/1.1 200 OK 
Server: GitHub.com 
Date: Thu, 19 Nov 2015 18:00:54 GMT 
Content-Type: application/json; charset=utf-8 
Content-Length: 100308 
Status: 200 OK 
X-RateLimit-Limit: 60 
X-RateLimit-Remaining: 56 
X-RateLimit-Reset: 1447958881 
Cache-Control: public, max-age=60, s-maxage=60 
Last-Modified: Thu, 19 Nov 2015 16:06:38 GMT 
ETag: "a57e0f74fc68e1791da15d33fa044616" 
Vary: Accept 
X-GitHub-Media-Type: github.v3 
Link: <https://api.github.com/repositories/2325298/contributors?per_page=100&page=2>; rel="next", <https://api.github.com/repositories/2325298/contributors?per_page=100&page=3>; rel="last" 
X-XSS-Protection: 1; mode=block 
X-Frame-Options: deny 
Content-Security-Policy: default-src 'none' 
Access-Control-Allow-Credentials: true 
Access-Control-Expose-Headers: ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval 
Access-Control-Allow-Origin: * 
Strict-Transport-Security: max-age=31536000; includeSubdomains; preload 
X-Content-Type-Options: nosniff 
Vary: Accept-Encoding 
X-Served-By: a30e6f9aa7cf5731b87dfb3b9992202d 
X-GitHub-Request-Id: 67E881D2:146C9:24CF1BB3:564E0E55 
+0

http://stackoverflow.com/questions/18148490/how-can-i-get-more-than-100-results-from-github-api-v3-using-github-api-gem –

risposta

0

Dal momento che l'API GitHub non sembra sostenere questo, un altro approccio (un approccio molto molto più lento) sarebbe quello di clonare il pronti contro termine e quindi eseguire il comando (per ottenere i nomi):

git log --all --format='%aN' | sort -u 

per ottenere risultati di indirizzo di posta elettronica (che dovrebbero evitare cambiamenti nome collaboratore di configurazione e sarà più preciso):

git log --all --format='%aE' | sort -u 

Se avete bisogno di questa funzionalità per qualsiasi repo si potrebbe scrivere un semplice script t hat prenderebbe il percorso del repository, clonerà il repository, eseguirà il comando e quindi cancellerà il repository scaricato.

Nel frattempo, è possibile contact GitHub nella speranza che aumentino la priorità nell'espansione/correzione dell'API.

+0

Questo è infinito più lento dell'utilizzo dell'API GitHub. C'è un modo molto migliore di iterare attraverso la lista dei contributori. – Whitecat

+0

@Whitecat Ma l'API Github non ha tutte le informazioni, quindi questo è l'unico modo attuale per farlo. – deFreitas