2012-11-17 13 views
7

katkıda bulunanlar eklenti hangi isim ve dokümantasyon sayfasına katkıda bulunmuş kişilerin Github profil bağlantılarını gösterir.Alma Github tek dosya bir eklenti Sfenks dokümantasyon sistemi için inşa planlıyorum

Github bu özelliğe sahip dahili

Contributors

  • o Github API üzerinden dosya katkıda Github profil bağlantıları almak mümkün mü? İşlemci e-postalarının yeterli olmadığını, bunların bir Github kullanıcı profili bağlantısına eşlenebildiğini unutmayın. Ayrıca, tüm dosya paylaşımcılarını istemiyorum.

  • bu Github bu bilgileri ayıklamak için hatırlatıyoruz alternatif yöntemlerin ne tür (özel API, kazıma) daha sonra mümkün değilse?

cevap

8

İlk olarak, show the commits for a given file yapabilirsiniz: Örneğin

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

:

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

Second, JSON yanıtı yaptığı yazar bölümünde,'bir url adında dosyalanması içerirler GitHub profiline':

"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" 
    }, 

Yani burada herhangi bir web sayfasını kazımak gerekmez. İşte

javascript özü dayalı olduğunu göstermek için bir very crude jsfiddle, geçerli:

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

Her zaman olduğu gibi, cevaplarınızı okumak için bir zevk, Von. Kapsamlı ve noktaya. –

+0

Teşekkürler. Tam olarak aradığım şey bu. Ödül vermeden önce alternatif cevaplar olup olmayacağını göreceğim. –

+1

Tamam, sonuçlar şu adresten görülebilir: https://github.com/miohtama/sphinxcontrib.contributors/ :) –

1

Bunun için neden Github API'sini kullanmanız gerekiyor? Sadece git log paketini klonlamak ve kullanabilirsiniz:

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

+0

Not o İşlemci e-postaları yeterli değil, bir Github kullanıcı profili bağlantısına eşlenebilmelidir. <- Hangi bölümün anlaşılması zor? –

+0

E-posta -> github kullanıcısını eşleyen başka bir katman ('.mailmap 'benzeri) eklemek zor olmaz. Sadece GitHub'dan e-posta adresini arayabilirsiniz – plaes

+1

@MikkoOhtamaa. –

0

kadar ve Github API ile etkileşim için gerekli değildir sürece doğrudan bir alabilirsiniz shortlog komut kullanarak aşağı repo klonlama ve daha sonra klonlanmış dizine alma ve daha sonra github günlük dosyasından listesini alarak katkı yapanlar

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") 

kullanarak list_contributors şöyle bir, biz Github API ile etkileşim ve katkıda listesini almak için pytgithub3 kapsayıcı kullanabilir Github API'sini kullanmak istediği durumda katkıda listelemek için bir yol daha vardır:

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 
İlgili konular