Pracujemy nad projektem, w którym musimy wyświetlić wszystkie projekty osoby w jej repozytorium na koncie GitHub.
Czy ktoś może zasugerować, jak mogę wyświetlić nazwy wszystkich repozytoriów git konkretnej osoby, używając jej nazwy git-user?
Pracujemy nad projektem, w którym musimy wyświetlić wszystkie projekty osoby w jej repozytorium na koncie GitHub.
Czy ktoś może zasugerować, jak mogę wyświetlić nazwy wszystkich repozytoriów git konkretnej osoby, używając jej nazwy git-user?
Odpowiedzi:
Możesz do tego użyć api github . Naciśnięcie https://api.github.com/users/USERNAME/repos
spowoduje wyświetlenie publicznych repozytoriów dla użytkownika NAZWA UŻYTKOWNIKA .
Skorzystaj z Github API :
/users/:user/repos
W ten sposób otrzymasz wszystkie publiczne repozytoria użytkownika. Jeśli chcesz znaleźć prywatne repozytoria, musisz uwierzytelnić się jako konkretny użytkownik. Następnie możesz użyć wywołania REST:
/user/repos
aby znaleźć wszystkie repozytoria użytkownika.
Aby to zrobić w Pythonie, zrób 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
Gdzie adres URL przekazany do funkcji jest adresem URL REST, jak w przykładach powyżej. Jeśli nie potrzebujesz uwierzytelniania, po prostu zmodyfikuj metodę, aby usunąć dodawanie nagłówka Authorization. Następnie możesz uzyskać dowolny publiczny adres URL interfejsu API za pomocą prostego żądania GET.
?per_page=100
aby uzyskać maksymalną kwotę, ale jeśli użytkownik ma więcej niż sto repozytoriów, będziesz musiał śledzić kilka next
adresów URL w Link
nagłówku HTTP wysyłanym z odpowiedzią.
Wypróbuj następujące curl
polecenie, aby wyświetlić listę repozytoriów:
GHUSER=CHANGEME; curl "https://api.github.com/users/$GHUSER/repos?per_page=100" | grep -o 'git@[^"]*'
Aby wyświetlić sklonowane adresy URL, uruchom:
GHUSER=CHANGEME; curl -s "https://api.github.com/users/$GHUSER/repos?per_page=1000" | grep -w clone_url | grep -o '[^"]\+://.\+.git'
Jeśli jest prywatny, musisz dodać swój klucz API ( access_token=GITHUB_API_TOKEN
), na przykład:
curl "https://api.github.com/users/$GHUSER/repos?access_token=$GITHUB_API_TOKEN" | grep -w clone_url
Jeśli użytkownik jest organizacją, użyj /orgs/:username/repos
zamiast tego, aby zwrócić wszystkie repozytoria.
Aby je sklonować, zobacz: Jak sklonować wszystkie repozytoria jednocześnie z GitHub?
Zobacz też: Jak pobrać GitHub Release z prywatnego repozytorium za pomocą wiersza poleceń
per_page=1000
.
-s
opcję do curl
polecenia, aby pozbyć się tych brzydkich pasków postępu, jak wcurl -s ...
/orgs/:username/repos
zwróć wszystkie repozytoria, /users/...
zwróć ich część, to naprawdę dziwne. nazwa użytkownika może być traktowana zarówno jako użytkownik, jak i organizacja.
Jeśli masz zainstalowany jq , możesz użyć następującego polecenia, aby wyświetlić wszystkie publiczne repozytoria użytkownika
curl -s https://api.github.com/users/<username>/repos | jq '.[]|.html_url'
Prawdopodobnie potrzebujesz rozwiązania 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>
Moduł NPM repo chwyta JSON dla wszystkich transakcji repo publicznych dla jakiegoś użytkownika lub grupy. Możesz to uruchomić bezpośrednio z poziomu, npx
więc nie musisz niczego instalować, wystarczy wybrać organizację lub użytkownika („W3C” tutaj):
$ npx repos W3C W3Crepos.json
Spowoduje to utworzenie pliku o nazwie W3Crepos.json. Grep jest wystarczająco dobry, aby np. Pobrać listę repozytoriów:
$ grep full_name W3Crepos.json
plusy:
Cons:
npx
(lub npm
jeśli chcesz go zainstalować naprawdę).Pobierz listę wszystkich publicznych repozytoriów użytkownika GitHub za pomocą Pythona:
import requests
username = input("Enter the github username:")
request = requests.get('https://api.github.com/users/'+username+'/repos')
json = request.json()
for i in range(0,len(json)):
print("Project Number:",i+1)
print("Project Name:",json[i]['name'])
print("Project URL:",json[i]['svn_url'],"\n")
Jest teraz opcja korzystania z niesamowitego GraphQL API Explorer .
Chciałem uzyskać listę wszystkich aktywnych repozytoriów mojej organizacji z ich odpowiednimi językami. To zapytanie robi właśnie to:
{
organization(login: "ORG_NAME") {
repositories(isFork: false, first: 100, orderBy: {field: UPDATED_AT, direction: DESC}) {
pageInfo {
endCursor
}
nodes {
name
updatedAt
languages(first: 5, orderBy: {field: SIZE, direction: DESC}) {
nodes {
name
}
}
primaryLanguage {
name
}
}
}
}
}
Jeśli szukasz repozytoriów organizacji-
api.github.com/orgs/$NAMEOFORG/repos
Przykład:
curl https://api.github.com/orgs/arduino-libraries/repos
Możesz również dodać parametr per_page, aby uzyskać wszystkie nazwy na wypadek, gdyby wystąpił problem z paginacją.
curl https://api.github.com/orgs/arduino-libraries/repos?per_page=100
Oto pełna specyfikacja interfejsu API repozytoriów:
https://developer.github.com/v3/repos/#list-repositories-for-a-user
GET /users/:username/repos
Parametry ciągu zapytania:
Pierwsze 5 jest udokumentowane w powyższym linku API. Parametry dla page
i per_page
które są udokumentowane w innym miejscu i są przydatne w pełnym opisie.
type
(string): Może być jednym z all
, owner
, member
. Domyślna:owner
sort
(string): Może być jednym z created
, updated
, pushed
, full_name
. Domyślna:full_name
direction
(ciąg): może być jednym z asc
lub desc
. Domyślnie: asc
podczas używania full_name
, w przeciwnym raziedesc
page
(liczba całkowita): Bieżąca stronaper_page
(liczba całkowita): liczba rekordów na stronęPonieważ jest to interfejs API HTTP GET, oprócz cURL, możesz go wypróbować po prostu w przeglądarce. Na przykład:
https://api.github.com/users/grokify/repos?per_page=1&page=2
HTML
<div class="repositories"></div>
JavaScript
// Repozytoria Github
Jeśli chcesz ograniczyć listę repozytoriów, możesz po prostu dodać ?per_page=3
po username/repos
.
na przykład username/repos?per_page=3
Zamiast / username
/ możesz umieścić nazwę użytkownika dowolnej osoby na Github.
var request = new XMLHttpRequest();
request.open('GET','https://api.github.com/users/username/repos' ,
true)
request.onload = function() {
var data = JSON.parse(this.response);
console.log(data);
var statusHTML = '';
$.each(data, function(i, status){
statusHTML += '<div class="card"> \
<a href=""> \
<h4>' + status.name + '</h4> \
<div class="state"> \
<span class="mr-4"><i class="fa fa-star mr-2"></i>' + status.stargazers_count + '</span> \
<span class="mr-4"><i class="fa fa-code-fork mr-2"></i>' + status.forks_count + '</span> \
</div> \
</a> \
</div>';
});
$('.repositories').html(statusHTML);
}
request.send();
Poniższy kod JS jest przeznaczony do użycia w konsoli.
username = "mathieucaroff";
w = window;
Promise.all(Array.from(Array(Math.ceil(1+184/30)).keys()).map(p =>
fetch(`//api.github.com/users/{username}/repos?page=${p}`).then(r => r.json())
)).then(all => {
w.jo = [].concat(...all);
// w.jo.sort();
// w.jof = w.jo.map(x => x.forks);
// w.jow = w.jo.map(x => x.watchers)
})
Odpowiedź brzmi: „/ users /: user / repo”, ale mam cały kod, który to robi w projekcie open source, którego można użyć do wystawienia aplikacji internetowej na serwerze.
Uruchomiłem projekt GitHub o nazwie Git-Captain, który komunikuje się z interfejsem API GitHub, który zawiera listę wszystkich repozytoriów.
Jest to aplikacja internetowa typu open source zbudowana przy użyciu Node.js przy użyciu interfejsu API GitHub do znajdowania, tworzenia i usuwania gałęzi w wielu repozytoriach GitHub.
Można go skonfigurować dla organizacji lub pojedynczego użytkownika.
Mam również instrukcje krok po kroku, jak to skonfigurować w read-me.
Aby uzyskać adres URL 100 repozytoriów publicznych użytkownika:
$.getJSON("https://api.github.com/users/suhailvs/repos?per_page=100", function(json) {
var resp = '';
$.each(json, function(index, value) {
resp=resp+index + ' ' + value['html_url']+ ' -';
console.log(resp);
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
const request = require('request');
const config = require('config');
router.get('/github/:username', (req, res) => {
try {
const options = {
uri: `https://api.github.com/users/${req.params.username}/repos?per_page=5
&sort=created:asc
&client_id=${config.get('githubClientId')}
&client_secret=${config.get('githubSecret')}`,
method: 'GET',
headers: { 'user-agent': 'node.js' }
};
request(options, (error, response, body) => {
if (error) console.log(error);
if (response.statusCode !== 200) {
res.status(404).json({ msg: 'No Github profile found.' })
}
res.json(JSON.parse(body));
})
} catch (err) {
console.log(err.message);
res.status(500).send('Server Error!');
}
});
?per_page=