2012-11-17 20 views
7

Tôi đang lên kế hoạch xây dựng một trình cắm thêm cho trình cắm thêm hệ thống tài liệu Sphinx, hiển thị tên và liên kết hồ sơ Github của những người đã đóng góp vào trang tài liệu.Nhận Github cá nhân đóng góp tập tin

Github có tính năng này trong nội bộ

Contributors

  • Có thể để có được Github liên kết hồ sơ của những người đóng góp tập tin thông qua Github API? Lưu ý rằng email commiter là không đủ, người ta phải có khả năng bản đồ chúng vào một liên kết hồ sơ người dùng Github. Cũng lưu ý rằng tôi không muốn tất cả những người đóng góp kho lưu trữ - chỉ những người đóng góp tệp riêng lẻ.

  • Nếu điều này là không thể thì loại phương pháp thay thế nào (API riêng, cào) bạn có thể đề xuất trích xuất thông tin này từ Github?

Trả lời

8

Trước tiên, bạn có thể show the commits for a given file:

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

Ví dụ:

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

Thứ hai, rằng JSON phản ứng không , trong phần tác giả, chứa url được đặt tên là 'html_url 'đến hồ sơ 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" 
    }, 

Vì vậy, bạn không cần phải loại bỏ bất kỳ trang web nào tại đây.


Đây là một very crude jsfiddle để minh họa rằng, dựa trên chiết xuất 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

Như mọi khi, thật vui khi đọc câu trả lời của bạn, Von. Toàn diện và cho vấn đề. –

+0

Cảm ơn. Điều này thật đúng với gì mà tôi đã tìm kiếm. Tôi sẽ xem nếu có câu trả lời thay thế trước khi đưa ra tiền thưởng. –

+1

Ok kết quả có thể xem tại đây: https://github.com/miohtama/sphinxcontrib.contributors/ :) –

1

Tại sao bạn cần sử dụng API Github cho điều đó? Bạn chỉ có thể sao chép các gói và sử dụng git log:

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

+0

Lưu ý rằng email commiter là không đủ, người ta phải có khả năng bản đồ chúng vào một liên kết hồ sơ người dùng Github. <- Phần nào khó hiểu? –

+0

Sẽ không khó để thêm một lớp khác (tương tự như '.mailmap') ánh xạ email -> người dùng github. – plaes

+1

@MikkoOhtamaa Bạn chỉ có thể tìm kiếm địa chỉ email trong GitHub. –

0

Cho đến khi và trừ khi nó không phải là cần thiết để tương tác với GitHub API trực tiếp người ta có thể nhận được danh sách các cộng tác viên bằng cách nhân bản repo xuống và sau đó vào thư mục nhân bản và sau đó lấy danh sách từ tệp nhật ký github bằng lệnh 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ó thêm một cách để liệt kê những người đóng góp trong trường hợp muốn sử dụng GitHub API, chúng ta có thể sử dụng pytgithub3 wrapper để tương tác với GitHub API và nhận được danh sách những người đóng góp như sau sử dụng 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 
Các vấn đề liên quan