2012-11-17 17 views
7

Sto pianificando di creare un plug-in per il plug-in del sistema di documentazione Sphinx che mostra i nomi e i link al profilo Github delle persone che hanno contribuito alla pagina della documentazione.Ottenere Github collaboratori singoli file

Github ha questa caratteristica internamente

Contributors

  • E 'possibile ottenere Github link profilo dei contributori di file attraverso Github API? Nota che le e-mail di committer non sono sufficienti, bisogna essere in grado di associarle a un link al profilo utente Github. Si noti inoltre che non desidero tutti i contributori del repository, ma solo i singoli contributori di file.

  • Se ciò non è possibile, quale tipo di metodi alternativi (API privata, scraping) è possibile suggerire di estrarre queste informazioni da Github?

risposta

8

In primo luogo, è possibile show the commits for a given file:

https://api.github.com/repos/:owner/:repo/commits?path=PATH_TO_FILE 

Per esempio:

https://api.github.com/repos/git/git/commits?path=README

In secondo luogo, che la risposta JSON fa , nella sezione autore, contiene un URL archiviato con il nome "" 343.210 'al profilo GitHub:

"author": { 
     "login": "gitster", 
     "id": 54884, 
     "avatar_url": "https://0.gravatar.com/avatar/750680c9dcc7d0be3ca83464a0da49d8?d=https%3A%2F%2Fidenticons.github.com%2Ff8e73a1fe6b3a5565851969c2cb234a7.png", 
     "gravatar_id": "750680c9dcc7d0be3ca83464a0da49d8", 
     "url": "https://api.github.com/users/gitster", 
     "html_url": "https://github.com/gitster",  <========== 
     "followers_url": "https://api.github.com/users/gitster/followers", 
     "following_url": "https://api.github.com/users/gitster/following{/other_user}", 
     "gists_url": "https://api.github.com/users/gitster/gists{/gist_id}", 
     "starred_url": "https://api.github.com/users/gitster/starred{/owner}{/repo}", 
     "subscriptions_url": "https://api.github.com/users/gitster/subscriptions", 
     "organizations_url": "https://api.github.com/users/gitster/orgs", 
     "repos_url": "https://api.github.com/users/gitster/repos", 
     "events_url": "https://api.github.com/users/gitster/events{/privacy}", 
     "received_events_url": "https://api.github.com/users/gitster/received_events", 
     "type": "User" 
    }, 

Così non dovrebbe essere necessario raschiare qualsiasi pagina web qui.


Ecco un very crude jsfiddle per illustrare che, sulla base di un estratto javascript:

var url = "https://api.github.com/repos/git/git/commits?path=" + filename 
$.getJSON(url, function(data) { 
    var twitterList = $("<ul />"); 
    $.each(data, function(index, item) { 
     if(item.author) { 
      $("<li />", { 
       "text": item.author.html_url 
      }).appendTo(twitterList); 
     } 
    }); 

get Contributors from a GiHub file

+0

Come sempre, è un piacere leggere le tue risposte, Von. Completo e al punto. –

+0

Grazie. Questo e 'esattamente quello che stavo cercando. Vedrò se ci saranno risposte alternative prima di dare la taglia. –

+1

Ok i risultati possono essere visti qui: https://github.com/miohtama/sphinxcontrib.contributors/ :) –

1

Perché è necessario utilizzare l'API Github per questo? Si può solo clonare il pacchetto e utilizzare git log:

git log --format=format:%an path/to/file ver1..ver2 |sort |uniq

+0

Si noti che le e-mail di contatto non sono sufficienti, bisogna essere in grado di associarle a un collegamento del profilo utente Github. <- Quale parte è difficile da capire? –

+0

Non sarebbe così difficile aggiungere un altro livello (simile a '.mailmap') che mappa email -> utente github. – plaes

+1

@MikkoOhtamaa Puoi semplicemente cercare l'indirizzo email in GitHub. –

0

Fino a quando ea meno che non è necessario interagire con GitHub API direttamente si può ottenere il elenco dei contributori clonando il repository verso il basso e quindi entrando nella directory clonata e quindi recuperando l'elenco dal file di registro github utilizzando il comando shortlog

import os 
import commands 

cmd = "git shortlog -s -n" 

os.chdir("C:\Users\DhruvOhri\Documents\COMP 6411\pygithub3-0.3") 
os.system("git clone https://github.com/poise/python.git") 
os.chdir("/home/d/d_ohri/Desktop/python") 
output = commands.getoutput(cmd) 
print(output) 
raw_input("press enter to continue") 

C'è un altro modo per elencare collaboratori nel caso in cui si vuole utilizzare Github API, possiamo usare pytgithub3 wrapper per interagire con GitHub API ed ottenere l'elenco dei collaboratori come segue utilizzando list_contributors:

from pytgithub3.services.repo import Repo 
r = Repo() 
r.lis_contributors(user='userid/author',repo='repo name') 
for page in r: 
    for result in page: 
      print result 
Problemi correlati