2012-01-03 39 views
36

Chúng tôi đang làm việc trên một dự án mà chúng tôi cần để hiển thị tất cả các dự án của một người trong kho lưu trữ của mình trên tài khoản GitHub.Làm thế nào để lấy danh sách tất cả kho lưu trữ github của một người?

bất cứ ai có thể đề xuất, làm thế nào tôi có thể hiển thị tên của tất cả các kho git của một người cụ thể sử dụng tên git người dùng của mình?

Trả lời

18

Bạn có thể sử dụng github api cho việc này. Nhấn https://api.github.com/users/username/repos sẽ liệt kê các kho lưu trữ công khai của người dùng đó.

+2

M ay muốn sử dụng API v3 gần đây hơn – BeRecursive

23

Sử dụng Github API:

/users/:user/repos

này sẽ cung cấp cho bạn tất cả các kho công cộng của người dùng. Nếu bạn cần tìm các kho lưu trữ riêng tư, bạn sẽ cần phải xác thực là người dùng cụ thể. Sau đó bạn có thể sử dụng cuộc gọi REST:

/user/repos

để tìm tất cả Repos của người dùng.

Để làm điều này bằng Python làm điều gì đó như:

USER='AUSER' 
API_TOKEN='ATOKEN' 
GIT_API_URL='https://api.github.com' 

def get_api(url): 
    try: 
     request = urllib2.Request(GIT_API_URL + url) 
     base64string = base64.encodestring('%s/token:%s' % (USER, API_TOKEN)).replace('\n', '') 
     request.add_header("Authorization", "Basic %s" % base64string) 
     result = urllib2.urlopen(request) 
     result.close() 
    except: 
     print 'Failed to get api request from %s' % url 

đâu url thông qua vào chức năng là url REST của như trong ví dụ trên. Nếu bạn không cần xác thực thì chỉ cần sửa đổi phương thức để loại bỏ thêm tiêu đề Cấp phép. Sau đó, bạn có thể nhận được bất kỳ url api công khai nào bằng cách sử dụng một yêu cầu GET đơn giản.

+15

Điều này sẽ chỉ cung cấp "trang" đầu tiên của tập hợp kết quả, được đặt ở 30 mục theo mặc định. Bạn có thể sử dụng '? Per_page = 100' để nhận được số tiền tối đa nhưng nếu người dùng có hơn 100 repos, bạn sẽ cần phải thực hiện theo một số URL' next' trong tiêu đề HTTP 'Link' gửi cùng với phản hồi. – Potherca

+1

Cảm ơn @Potherca, chỉ là những gì tôi đang tìm kiếm! – aknuds1

16

Thử curl lệnh sau để liệt kê các kho:

USER=foo; curl "https://api.github.com/users/$USER/repos?per_page=100" | grep -o '[email protected][^"]*' 

Nếu đó là tư nhân, bạn cần phải thêm khóa API của bạn (access_token=GITHUB_API_TOKEN). Kiểm tra this script làm ví dụ.

Để sao chép chúng, hãy xem: How to clone all repos at once from GitHub?

+2

Điều này chỉ hiển thị 100 vùng lưu trữ đầu tiên, bất kể 'per_page = 1000'. – jm666

+1

Thêm 'tùy chọn -s' cho 'lệnh curl' của bạn để thoát khỏi những thanh tiến trình khó coi, như trong' curl -s ... ' – xmnboy

+1

Như @ jm666 nói, kích thước trang tối đa là 100. Để xem 2 trang, làm: curl "https://api.github.com/users/$USER/repos?per_page=100\&page=2" – rscohn2

0

Có thể bạn cần một giải pháp jsonp:

https://api.github.com/users/[user name]/repos?callback=abc

Nếu bạn sử dụng jQuery:

$.ajax({ 
 
    url: "https://api.github.com/users/blackmiaool/repos", 
 
    jsonp: true, 
 
    method: "GET", 
 
    dataType: "json", 
 
    success: function(res) { 
 
    console.log(res) 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Các vấn đề liên quan