Kami sedang mengerjakan proyek di mana kami perlu menampilkan semua proyek seseorang di repositori di akun GitHub.
Adakah yang bisa menyarankan, bagaimana cara menampilkan nama semua repositori git orang tertentu menggunakan nama pengguna gitnya?
Kami sedang mengerjakan proyek di mana kami perlu menampilkan semua proyek seseorang di repositori di akun GitHub.
Adakah yang bisa menyarankan, bagaimana cara menampilkan nama semua repositori git orang tertentu menggunakan nama pengguna gitnya?
Jawaban:
Anda dapat menggunakan api github untuk ini. Memukul https://api.github.com/users/USERNAME/repos
akan mencantumkan repositori publik untuk USERNAME pengguna .
Gunakan Github API :
/users/:user/repos
Ini akan memberi Anda semua repositori publik pengguna. Jika Anda perlu mengetahui repositori pribadi, Anda perlu mengautentikasi sebagai pengguna tertentu. Anda kemudian dapat menggunakan panggilan REST:
/user/repos
untuk menemukan semua repositori pengguna.
Untuk melakukan ini dengan Python, lakukan sesuatu seperti:
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
Dimana url yang diteruskan ke fungsi tersebut adalah url REST seperti pada contoh di atas. Jika Anda tidak perlu mengautentikasi, cukup ubah metode untuk menghapus penambahan header Otorisasi. Anda kemudian bisa mendapatkan url api publik menggunakan permintaan GET sederhana.
?per_page=100
untuk mendapatkan jumlah maksimum tetapi jika pengguna memiliki lebih dari seratus repo, Anda harus mengikuti beberapa next
URL di Link
header HTTP yang dikirim dengan respons.
Coba curl
perintah berikut untuk mendaftar repositori:
GHUSER=CHANGEME; curl "https://api.github.com/users/$GHUSER/repos?per_page=100" | grep -o 'git@[^"]*'
Untuk membuat daftar URL yang digandakan, jalankan:
GHUSER=CHANGEME; curl -s "https://api.github.com/users/$GHUSER/repos?per_page=1000" | grep -w clone_url | grep -o '[^"]\+://.\+.git'
Jika itu pribadi, Anda perlu menambahkan kunci API Anda ( access_token=GITHUB_API_TOKEN
), misalnya:
curl "https://api.github.com/users/$GHUSER/repos?access_token=$GITHUB_API_TOKEN" | grep -w clone_url
Jika pengguna adalah organisasi, gunakan /orgs/:username/repos
sebagai gantinya, untuk mengembalikan semua repositori.
Untuk mengkloningnya, lihat: Bagaimana cara mengkloning semua repo sekaligus dari GitHub?
Lihat juga: Cara mengunduh GitHub Release dari repo pribadi menggunakan baris perintah
per_page=1000
.
-s
opsi ke curl
perintah Anda untuk menyingkirkan bilah kemajuan yang tidak sedap dipandang itu, seperti dalamcurl -s ...
/orgs/:username/repos
kembalikan semua repo, /users/...
kembalikan sebagian, ini memang aneh. nama pengguna dapat diperlakukan sebagai pengguna atau organisasi.
Jika Anda memiliki jq terinstal, Anda dapat menggunakan perintah berikut untuk membuat daftar semua repo publik pengguna
curl -s https://api.github.com/users/<username>/repos | jq '.[]|.html_url'
Anda mungkin membutuhkan solusi jsonp:
https://api.github.com/users/[user name]/repos?callback=abc
Jika Anda menggunakan 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>
Repos modul NPM mengambil JSON untuk semua repo publik untuk beberapa pengguna atau grup. Anda dapat menjalankan ini langsung dari npx
sehingga Anda tidak perlu menginstal apa pun, cukup pilih org atau pengguna ("W3C" di sini):
$ npx repos W3C W3Crepos.json
Ini akan membuat file bernama W3Crepos.json. Grep cukup baik untuk misalnya mengambil daftar repo:
$ grep full_name W3Crepos.json
kelebihan:
kontra:
npx
(atau npm
jika Anda ingin menginstalnya secara nyata).Ambil daftar semua repositori publik pengguna GitHub menggunakan Python:
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")
Sekarang ada opsi untuk menggunakan GraphQL API Explorer yang mengagumkan .
Saya ingin daftar semua repositori aktif organisasi saya dengan bahasanya masing-masing. Kueri ini hanya melakukan itu:
{
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
}
}
}
}
}
Jika mencari repo dari suatu organisasi-
api.github.com/orgs/$NAMEOFORG/repos
Contoh:
curl https://api.github.com/orgs/arduino-libraries/repos
Anda juga bisa menambahkan parameter per_page untuk mendapatkan semua nama kalau-kalau ada masalah pagination-
curl https://api.github.com/orgs/arduino-libraries/repos?per_page=100
Berikut adalah spesifikasi lengkap untuk API repos:
https://developer.github.com/v3/repos/#list-repositories-for-a-user
GET /users/:username/repos
Parameter String Kueri:
5 yang pertama didokumentasikan dalam tautan API di atas. Parameter untuk page
dan per_page
yang didokumentasikan di tempat lain dan berguna dalam deskripsi lengkap.
type
(string): Bisa menjadi salah satu all
, owner
, member
. Default:owner
sort
(string): Bisa menjadi salah satu created
, updated
, pushed
, full_name
. Default:full_name
direction
(string): Bisa salah satu dari asc
atau desc
. Default: asc
saat menggunakan full_name
, sebaliknyadesc
page
(integer): Halaman saat iniper_page
(integer): jumlah record per halamanKarena ini adalah HTTP GET API, selain cURL, Anda dapat mencobanya di browser. Sebagai contoh:
https://api.github.com/users/grokify/repos?per_page=1&page=2
HTML
<div class="repositories"></div>
JavaScript
// Repo Github
Jika Anda ingin membatasi daftar repositori, Anda dapat menambahkan ?per_page=3
setelahnya username/repos
.
misalnya username/repos?per_page=3
Sebagai ganti / username
/, Anda dapat memasukkan nama pengguna siapa pun di 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();
Kode JS di bawah ini dimaksudkan untuk digunakan di konsol.
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)
})
Jawabannya adalah "/ users /: user / repo", tetapi saya memiliki semua kode yang melakukan ini dalam proyek sumber terbuka yang dapat Anda gunakan untuk membuat aplikasi web di server.
Saya mendukung proyek GitHub bernama Git-Captain yang berkomunikasi dengan GitHub API yang mencantumkan semua repo.
Ini adalah aplikasi web sumber terbuka yang dibangun dengan Node.js menggunakan GitHub API untuk menemukan, membuat, dan menghapus cabang di banyak repositori GitHub.
Ini dapat disiapkan untuk organisasi atau satu pengguna.
Saya punya step-by-step cara mengaturnya juga di read-me.
Untuk mendapatkan url 100 repositori publik pengguna:
$.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