我们正在开发一个项目,我们需要在该人的GitHub帐户的存储库中显示该人的所有项目。
谁能建议,我该如何使用特定用户的git-user名称显示其所有git存储库的名称?
Answers:
您可以为此使用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是REST URL。如果您不需要进行身份验证,则只需修改方法即可删除添加的Authorization标头。然后,您可以使用简单的GET请求获取任何公共api网址。
?per_page=100
来获得最大数量,但是如果用户有一百个以上的回购,则需要next
在HTTPLink
标头中跟随响应发送多个URL 。
尝试使用以下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一次克隆所有存储库?
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>
使用Python检索GitHub用户的所有公共存储库的列表:
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
这是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”,但是我拥有一个开源项目中执行此操作的所有代码,可用于在服务器上站立一个Web应用程序。
我站起来了一个名为Git-Captain的GitHub项目,该项目与列出所有存储库的GitHub API通信。
这是一个使用Node.js构建的开源Web应用程序,利用GitHub API在整个GitHub存储库中查找,创建和删除分支。
可以为组织或单个用户设置。
我逐步介绍了如何在自述文件中进行设置。
要获取用户的100个公共存储库的URL,请执行以下操作:
$.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