我尝试使用GitHub API v4(GraphQL)构建查询以获取贡献者的数量。
目前我有一些像
这样的东西query ($owner: String!, $name: String!) {
repository(owner: $owner, name: $name) {
ref(qualifiedName: "master") {
target {
... on Commit {
history(first: 100) {
nodes {
author {
name
}
}
pageInfo {
hasNextPage
endCursor
}
}
}
}
}
}
}
我将浏览所有提交并获取作者的名称(当时我试图获取贡献者的提交数量),但对于具有大量提交的存储库,这需要很多时候。
回到我的问题,这是一种只获取存储库中贡献者数量的方法吗?
答案 0 :(得分:1)
据我所知,这只能通过REST API(v3)实现,每页只请求一个项目,并提取响应头中的总页数。
答案 1 :(得分:0)
使用此graphql查询,您可以获得: -总发行数量 -分支机构总数 -总提交数
query{
repository(owner:"kasadawa", name:"vmware-task") {
Releases:refs(first: 0, refPrefix: "refs/tags/") {
totalCount
}
Branches:refs(first: 0, refPrefix: "refs/heads/") {
totalCount
}
object(expression:"master") {
... on Commit {
history {
totalCount
}
}
}
}
}
但是,如果您想获得贡献者,则应该使用REST API来实现,因为目前没有简单的方法可以使用GRAPHQL API来实现它。
这是REST API的解决方案。
const options = {
url: 'https://api.github.com/repos/vmware/contributors' ,
'json': true ,
headers: {
'User-Agent':'request',
'Authorization': 'token API_KEY_GENERATED_FROM_GITHUB'
}
};
var lastPageNum = 0 ; // global variable
request.getAsync(options).then((res) =>{
this.checkHeaders(res.headers.status) // just check the header status
// check if there are more pages
if(!!res.headers.link){
const [ , lastURL] = res.headers.link.split(','); // getting the last page link from the header
lastPageNum = +lastURL.match(/page=(\d+)/)[1]; // get the number from the url string
options.url = licenseUrl + lastPageNum;
return request.getAsync(options) // make Request with the last page, in order to get the last page results, they could be less than 30
}else{
// if its single page just resolve on to the chain
return Promise.resolve(res.body.length);
}
})
.then((lastPageRes)=>{
return (lastPageNum !== 0
? ( (lastPageNum-1)*30 + lastPageRes.body.length )
: lastPageRes)
})
.catch() // handle errors