Deposundaki bir kişinin tüm projelerini GitHub hesabında görüntülememiz gereken bir proje üzerinde çalışıyoruz.
Herhangi biri önerebilir, belirli bir kişinin git-kullanıcı adını kullanarak tüm git depolarının adlarını nasıl görüntüleyebilirim?
Deposundaki bir kişinin tüm projelerini GitHub hesabında görüntülememiz gereken bir proje üzerinde çalışıyoruz.
Herhangi biri önerebilir, belirli bir kişinin git-kullanıcı adını kullanarak tüm git depolarının adlarını nasıl görüntüleyebilirim?
Yanıtlar:
Bunun için github api'sini kullanabilirsiniz . İsabet https://api.github.com/users/USERNAME/repos
edildiğinde, USERNAME kullanıcısı için herkese açık kod depoları listelenir .
Github API'sini kullanın :
/users/:user/repos
Bu size kullanıcının tüm genel depolarını verecektir. Özel depoları bulmanız gerekirse, belirli kullanıcı olarak kimlik doğrulaması yapmanız gerekecektir. Daha sonra REST çağrısını kullanabilirsiniz:
/user/repos
tüm kullanıcının depolarını bulmak için.
Bunu Python'da yapmak için aşağıdaki gibi bir şey yapın:
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
İşleve iletilen url, yukarıdaki örneklerde olduğu gibi REST url'dir. Kimlik doğrulaması yapmanız gerekmiyorsa, Yetkilendirme başlığı eklemeyi kaldırmak için yöntemi değiştirmeniz yeterlidir. Daha sonra basit bir GET isteği kullanarak herhangi bir genel api url'sini alabilirsiniz.
?per_page=100
Maksimum miktarı elde etmek için kullanabilirsiniz , ancak bir kullanıcının yüzden fazla deposu varsa , yanıtla birlikte gönderilen next
HTTP Link
başlığındaki birkaç URL'yi izlemeniz gerekir .
curl
Depoları listelemek için aşağıdaki komutu deneyin :
GHUSER=CHANGEME; curl "https://api.github.com/users/$GHUSER/repos?per_page=100" | grep -o 'git@[^"]*'
Klonlanmış URL'leri listelemek için şunu çalıştırın:
GHUSER=CHANGEME; curl -s "https://api.github.com/users/$GHUSER/repos?per_page=1000" | grep -w clone_url | grep -o '[^"]\+://.\+.git'
Gizli ise, API anahtarınızı ( access_token=GITHUB_API_TOKEN
) eklemeniz gerekir , örneğin:
curl "https://api.github.com/users/$GHUSER/repos?access_token=$GITHUB_API_TOKEN" | grep -w clone_url
Kullanıcı bir organizasyon ise, /orgs/:username/repos
tüm depoları döndürmek için bunun yerine kullanın .
Bunları klonlamak için bkz: GitHub'dan tüm depoları aynı anda nasıl klonlayabilirim?
Ayrıca bkz: GitHub Sürümünü komut satırını kullanarak özel depodan indirme
per_page=1000
.
-s
için curl
komutunuza seçeneği ekleyin,curl -s ...
/orgs/:username/repos
tüm depoları /users/...
iade edin, bir kısmını iade edin, bu gerçekten garip. kullanıcı adı hem kullanıcı hem de kuruluş olarak kabul edilebilir.
Eğer varsa jq yüklü, bir kullanıcının tüm kamu repo listelemek için aşağıdaki komutu kullanabilirsiniz
curl -s https://api.github.com/users/<username>/repos | jq '.[]|.html_url'
Muhtemelen bir jsonp çözümüne ihtiyacınız var:
https://api.github.com/users/[user name]/repos?callback=abc
JQuery kullanıyorsanız:
$.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>
NPM modülü depoları , bazı kullanıcı veya grup için tüm genel depoların JSON'unu alır. Bunu doğrudan üzerinden çalıştırabilirsiniz, npx
böylece herhangi bir şey yüklemenize gerek kalmaz, sadece bir kuruluş veya kullanıcı seçin (burada "W3C"):
$ npx repos W3C W3Crepos.json
Bu, W3Crepos.json adlı bir dosya oluşturacaktır. Grep, örneğin depoların listesini getirecek kadar iyidir:
$ grep full_name W3Crepos.json
artıları:
Eksileri:
npx
(veya npm
gerçekten yüklemek istiyorsanız).Python kullanarak bir GitHub kullanıcısının tüm genel depolarının listesini alın:
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")
Artık harika GraphQL API Explorer'ı kullanma seçeneği var .
Kuruluşumun tüm aktif depolarının kendi dilleriyle birlikte bir listesini istedim. Bu sorgu tam olarak şunu yapar:
{
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
}
}
}
}
}
Bir kuruluşun depolarını arıyorsanız-
api.github.com/orgs/$NAMEOFORG/repos
Misal:
curl https://api.github.com/orgs/arduino-libraries/repos
Ayrıca, sayfalandırma sorunu olması durumunda tüm adları almak için per_page parametresini ekleyebilirsiniz.
curl https://api.github.com/orgs/arduino-libraries/repos?per_page=100
İşte repos API'sinin tam bir özelliği:
https://developer.github.com/v3/repos/#list-repositories-for-a-user
GET /users/:username/repos
Sorgu Dizesi Parametreleri:
İlk 5, yukarıdaki API bağlantısında belgelenmiştir. İçin parametreler page
ve per_page
başka yerlerde belgelenmiş ve tam açıklaması faydalıdır edilir.
type
(dize): biri olabilir all
, owner
, member
. Varsayılan:owner
sort
(dize): biri olabilir created
, updated
, pushed
, full_name
. Varsayılan:full_name
direction
(string): asc
veya değerlerinden biri olabilir desc
. Varsayılan: asc
kullanırken full_name
, aksi haldedesc
page
(tamsayı): Geçerli sayfaper_page
(tamsayı): sayfa başına kayıt sayısıBu bir HTTP GET API olduğundan, cURL'ye ek olarak, bunu tarayıcıda da deneyebilirsiniz. Örneğin:
https://api.github.com/users/grokify/repos?per_page=1&page=2
HTML
<div class="repositories"></div>
JavaScript
// Github depoları
Depo listesini sınırlamak istiyorsanız, hemen ?per_page=3
sonrasına ekleyebilirsiniz username/repos
.
Örneğin username/repos?per_page=3
/ username
/ Yerine herhangi bir kişinin kullanıcı adını Github'a koyabilirsiniz.
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();
Aşağıdaki JS kodu bir konsolda kullanılmak üzere tasarlanmıştır.
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)
})
Cevap "/ users /: user / repo", ancak bunu bir sunucuda bir web uygulamasını ayağa kaldırmak için kullanabileceğiniz açık kaynaklı bir projede yapan tüm koda sahibim.
Tüm depoları listeleyen GitHub API ile iletişim kuran Git-Captain adlı bir GitHub projesi oluşturdum.
Çok sayıda GitHub deposunda bir şube bulmak, oluşturmak ve silmek için GitHub API kullanan Node.js ile oluşturulmuş açık kaynaklı bir web uygulamasıdır.
Kuruluşlar için veya tek bir kullanıcı için kurulabilir.
Beni oku'da da nasıl ayarlayacağımı adım adım anlatıyorum.
Kullanıcının 100 genel kod deposunun url'sini almak için:
$.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=
developer.github.com/v3/#pagination