Ми працюємо над проектом, де нам потрібно відобразити всі проекти людини в його сховищі на акаунті 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для отримання максимальної суми, але якщо у користувача більше сотні репозиторіїв, вам потрібно буде перейти за кількома nextURL-адресами в 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. За замовчуванням:ownersort(Рядок): Може бути один з created, updated, pushed, full_name. За замовчуванням:full_namedirection(рядок): Може бути одним із ascабо desc. За замовчуванням: ascпід час використання full_name, інакшеdescpage (ціле число): поточна сторінка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