Мы работаем над проектом, где нам нужно отобразить все проекты человека в его репозитории в аккаунте GitHub.
Может ли кто-нибудь подсказать, как я могу отобразить имена всех репозиториев git конкретного человека, используя его имя пользователя git?
Мы работаем над проектом, где нам нужно отобразить все проекты человека в его репозитории в аккаунте GitHub.
Может ли кто-нибудь подсказать, как я могу отобразить имена всех репозиториев git конкретного человека, используя его имя пользователя git?
Ответы:
Для этого вы можете использовать github api . При нажатии https://api.github.com/users/USERNAME/repos
будут перечислены общедоступные репозитории для пользователя USERNAME .
Используйте Github API :
/users/:user/repos
Это предоставит вам все общедоступные репозитории пользователя. Если вам нужно найти частные репозитории, вам нужно будет пройти аутентификацию как конкретный пользователь. Затем вы можете использовать вызов REST:
/user/repos
чтобы найти все репозитории пользователя.
Для этого в Python сделайте что-нибудь вроде:
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
Если URL-адрес, переданный в функцию, является URL-адресом REST, как в приведенных выше примерах. Если вам не нужна аутентификация, просто измените метод, чтобы удалить добавление заголовка авторизации. Затем вы можете получить любой общедоступный URL-адрес API, используя простой запрос GET.
?per_page=100
для получения максимального количества, но если у пользователя более сотни репозиториев, вам нужно будет следовать нескольким next
URL-адресам в HTTP- Link
заголовке, отправленном с ответом.
Попробуйте следующую curl
команду, чтобы вывести список репозиториев:
GHUSER=CHANGEME; curl "https://api.github.com/users/$GHUSER/repos?per_page=100" | grep -o 'git@[^"]*'
Чтобы вывести список клонированных URL-адресов, выполните:
GHUSER=CHANGEME; curl -s "https://api.github.com/users/$GHUSER/repos?per_page=1000" | grep -w clone_url | grep -o '[^"]\+://.\+.git'
Если он частный, вам нужно добавить свой ключ API ( access_token=GITHUB_API_TOKEN
), например:
curl "https://api.github.com/users/$GHUSER/repos?access_token=$GITHUB_API_TOKEN" | grep -w clone_url
Если пользователь является организацией, используйте /orgs/:username/repos
вместо этого, чтобы вернуть все репозитории.
Чтобы клонировать их, см .: Как клонировать все репозитории сразу с GitHub?
См. Также: Как загрузить выпуск GitHub из частного репо с помощью командной строки
per_page=1000
.
-s
свою curl
команду опцию, чтобы избавиться от этих неприглядных индикаторов выполнения, как вcurl -s ...
/orgs/:username/repos
верните все репозитории, /users/...
верните их часть, это действительно странно. имя пользователя может рассматриваться как как пользователь, так и как организация.
Вероятно, вам понадобится решение jsonp:
https://api.github.com/users/[user name]/repos?callback=abc
Если вы используете 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>
Модуль NPM РЕПО хватает JSON для всех публичных сделок РЕПО для некоторого пользователя или группы. Вы можете запустить это прямо из, npx
поэтому вам не нужно ничего устанавливать, просто выберите организацию или пользователя (здесь "W3C"):
$ npx repos W3C W3Crepos.json
Это создаст файл с именем W3Crepos.json. Grep достаточно хорош, например, для получения списка репозиториев:
$ grep full_name W3Crepos.json
плюсы:
минусы:
npx
(или npm
если хотите установить по-настоящему).Получите список всех публичных репозиториев пользователя GitHub с помощью 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")
Теперь есть возможность использовать замечательный GraphQL API Explorer .
Мне нужен список всех активных репозиториев моей организации с соответствующими языками. Этот запрос делает именно это:
{
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
}
}
}
}
}
Если вы ищете репо организации -
api.github.com/orgs/$NAMEOFORG/repos
Пример:
curl https://api.github.com/orgs/arduino-libraries/repos
Также вы можете добавить параметр per_page, чтобы получить все имена на всякий случай, если возникнет проблема с разбивкой на страницы -
curl https://api.github.com/orgs/arduino-libraries/repos?per_page=100
Вот полная спецификация API репозиториев:
https://developer.github.com/v3/repos/#list-repositories-for-a-user
GET /users/:username/repos
Параметры строки запроса:
Первые 5 задокументированы в приведенной выше ссылке API. Параметры для page
и, per_page
которые задокументированы в другом месте и полезны в полном описании.
type
(строка): Может быть один из all
, owner
, member
. По умолчанию:owner
sort
(строка): Может быть один из created
, updated
, pushed
, full_name
. По умолчанию:full_name
direction
(строка): может быть одним из asc
или desc
. По умолчанию: asc
при использовании full_name
, в противном случаеdesc
page
(целое число): Текущая страницаper_page
(целое число): количество записей на страницеПоскольку это HTTP GET API, в дополнение к cURL, вы можете попробовать это просто в браузере. Например:
https://api.github.com/users/grokify/repos?per_page=1&page=2
HTML
<div class="repositories"></div>
JavaScript
// Репозитории Github
Если вы хотите ограничить список репозиториев, вы можете просто добавить ?per_page=3
после username/repos
.
например username/repos?per_page=3
Вместо / username
/ вы можете поместить имя пользователя любого человека на 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();
Приведенный ниже код JS предназначен для использования в консоли.
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)
})
Ответ - «/ users /: user / repo», но у меня есть весь код, который делает это в проекте с открытым исходным кодом, который вы можете использовать для установки веб-приложения на сервере.
Я создал проект GitHub под названием Git-Captain, который взаимодействует с API GitHub, в котором перечислены все репозитории.
Это веб-приложение с открытым исходным кодом, созданное с помощью Node.js и использующее GitHub API для поиска, создания и удаления ветки во многих репозиториях GitHub.
Его можно настроить для организаций или одного пользователя.
У меня есть пошаговая инструкция по настройке в read-me.
Чтобы получить URL-адрес 100 общедоступных репозиториев пользователя:
$.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