2012-01-03 20 views

Odpowiedz

18

Możesz użyć do tego celu github api. Naciśnięcie klawisza https://api.github.com/users/username/repos spowoduje wyświetlenie publicznych repozytoriów użytkownika.

+2

M ay chcesz użyć nowszego API v3 – BeRecursive

23

Użyj Github API:

/users/:user/repos

To daje wszystkie repozytoria publicznych użytkownika. Jeśli chcesz znaleźć prywatne repozytoria, musisz uwierzytelnić się jako konkretny użytkownik. Następnie można użyć połączenia rekreacyjne:

/user/repos

znaleźć wszystkie repo użytkownika.

Aby to zrobić w Pythonie zrobić coś takiego:

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 

Jeżeli url przekazany do funkcji jest url REST jak w powyższych przykładach. Jeśli nie potrzebujesz uwierzytelniania, po prostu zmodyfikuj metodę usuwania nagłówka Authorization. Następnie można uzyskać dowolny publiczny adres URL api za pomocą prostego żądania GET.

+15

To da tylko pierwszą "stronę" zestawu wyników, który jest ustawiony domyślnie na 30 pozycji. Możesz użyć '? Per_page = 100', aby uzyskać maksymalną ilość, ale jeśli użytkownik ma więcej niż sto repozytoriów, będziesz musiał przestrzegać kilku' next' adresów URL w nagłówku HTTP 'Link' wysłanym z odpowiedzią. – Potherca

+1

Dzięki @Potherca, właśnie tego szukałem! – aknuds1

16

Spróbuj następującą komendę curl do listy repozytoriów:

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

Jeśli jest to prywatny, trzeba dodać swój klucz API (access_token=GITHUB_API_TOKEN). Na przykład sprawdź numer this script.

Aby je sklonować, zobaczyć: How to clone all repos at once from GitHub?

+2

To pokazuje tylko pierwsze 100 repozytoriów, niezależnie od 'per_page = 1000'. – jm666

+1

Dodaj opcję '-s' do polecenia' curl', aby pozbyć się nieestetycznych pasków postępu, jak w 'curl -s ...' – xmnboy

+1

Jak mówi @ jm666, maksymalny rozmiar strony to 100. Aby zobaczyć 2 page, do: curl "https://api.github.com/users/$USER/repos?per_page=100\&page=2" – rscohn2

0

Prawdopodobnie potrzebne jest rozwiązanie jsonp:

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

Jeśli używasz 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>