2012-11-17 25 views
7

Mam zamiar zbudować wtyczkę dla wtyczki systemu dokumentacji Sphinx, która pokazuje nazwy i linki profilu Github osób, które przyczyniły się do strony dokumentacji.Otrzymywanie pojedynczych plików Github

Github ma tej funkcji wewnętrznie

Contributors

  • Czy to możliwe, aby uzyskać profil GitHub linki autorów plików poprzez GitHub API? Zauważ, że e-maile pośredniczące nie są wystarczające, musisz mieć możliwość odwzorowania ich na link profilu użytkownika Github. Zauważ też, że nie chcę wszystkich współtwórców repozytoriów - tylko poszczególnych użytkowników plików.

  • Jeśli nie jest to możliwe, jakie alternatywne metody (prywatne API, skrobanie) może sugerować wyodrębnienie tej informacji z Github?

Odpowiedz

8

Po pierwsze, można show the commits for a given file:

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

Na przykład:

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

drugie, że odpowiedź JSON robi , w sekcji autora znajduje się adres URL o nazwie "html_url 'do profilu 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" 
    }, 

Nie powinieneś więc potrzebować zeskanować żadnej strony tutaj.


Oto very crude jsfiddle zilustrować, że na podstawie wyciągu 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

Jak zawsze, jest przyjemnością przeczytać odpowiedzi, Von. Kompleksowe i na temat. –

+0

Dzięki. Właśnie tego szukałem. Zobaczę, czy będą dostępne alternatywne odpowiedzi, zanim wydam nagrodę. –

+1

OK wyniki można zobaczyć tutaj: https://github.com/miohtama/sphinxcontrib.contributors/ :) –

1

Dlaczego do tego celu należy użyć Github API? Można po prostu sklonować pakiet i korzystać git log:

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

+0

Należy pamiętać, że e-maile od komisarzy nie są wystarczające, trzeba umieć odwzorować je na link profilu użytkownika Github. <- Która część jest trudna do zrozumienia? –

+0

Nie byłoby trudno dodać kolejną warstwę (podobną do '.mailmap'), która mapuje email -> użytkownik github. – plaes

+1

@MikkoOhtamaa Możesz po prostu wyszukać adres e-mail w GitHub. –

0

Dopóki nie jest konieczne do interakcji z GitHub API bezpośrednio można dostać lista współtwórców poprzez sklonowanie zrzeczenia się, a następnie dostanie się do sklonowanego katalogu, a następnie pobranie listy z pliku dziennika github za pomocą komendy 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") 

Jest jeszcze jedna droga do listy współpracowników w przypadku, gdy jeden chce użyć GitHub API, możemy użyć pytgithub3 opakowanie do interakcji z GitHub API i uzyskać listę autorów, jak następuje za pomocą 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 
Powiązane problemy