Ми працюємо над проектом, де нам потрібно відобразити всі проекти людини в його сховищі на акаунті GitHub.
Хтось може запропонувати, як я можу відобразити імена всіх сховищ git конкретної людини, використовуючи його ім'я користувача git?
Ми працюємо над проектом, де нам потрібно відобразити всі проекти людини в його сховищі на акаунті GitHub.
Хтось може запропонувати, як я можу відобразити імена всіх сховищ git конкретної людини, використовуючи його ім'я користувача git?
Відповіді:
Для цього ви можете використовувати github api . Якщо натиснути, https://api.github.com/users/USERNAME/repos
з’явиться список загальнодоступних сховищ для користувача USERNAME .
Використовуйте API Github :
/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-адреса, передана функції, є REST-адресою, як у прикладах вище. Якщо вам не потрібно автентифікуватися, просто змініть метод, щоб видалити додавання заголовка авторизації. Потім ви можете отримати будь-яку загальнодоступну URL-адресу API, використовуючи простий запит GET.
?per_page=100
для отримання максимальної суми, але якщо у користувача більше сотні репозиторіїв, вам потрібно буде перейти за кількома next
URL-адресами в Link
заголовку HTTP, що надсилається із відповіддю.
Спробуйте 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 Release з приватного репозиторію за допомогою командного рядка
per_page=1000
.
-s
опцію до своєї curl
команди, щоб позбутися тих непривабливих індикаторів прогресу, як уcurl -s ...
/orgs/:username/repos
поверніть усі репозиторії, /users/...
поверніть їх частину, це справді дивно. ім'я користувача може розглядатися як як користувач, так і як організація.
Якщо у вас встановлений jq , ви можете використати таку команду, щоб перерахувати всі загальнодоступні репозиторії користувача
curl -s https://api.github.com/users/<username>/repos | jq '.[]|.html_url'
Ймовірно, вам потрібне рішення 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")
Тепер є можливість використовувати чудовий Провідник API GraphQL .
Я хотів отримати список усіх активних репозиторіїв моєї організації з відповідними мовами. Цей запит робить саме це:
{
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
Ось повна специфікація для repos 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 з використанням API GitHub для пошуку, створення та видалення гілки у численних сховищах GitHub.
Це може бути налаштовано для організацій або одного користувача.
У мене є покрокова інструкція, як це налаштувати у програмі читання.
Щоб отримати 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