我正在寻找获取提交的作者/贡献者的方法。我是github-api的新手,this让我比我想象的更麻烦。
?author=
,如this 问题描述
如果我有文件such as this的URL,是否有一个github API向我显示已提交该文件的贡献者列表?
或者,我是否需要使用多个API调用的结果,例如(例如)
I'm thinking of cross-referencing the outputs of those two^ if everything else fails.
This应该返回Pratik855
我发现了这个SO answer,但这并不是我想要的。虽然提出了所有要求,但我不确定https://api.github.com/repos/csitauthority/csitauthority.github.io/commits?=README
如何根据https://api.github.com/repos/csitauthority/csitauthority.github.io/commits?=HUGO/content/page/vlan-101.md
转换为https://github.com/csitauthority/CSITauthority.github.io/blob/master/HUGO/content/post/vlan-101.md
,因为HUGO只能生成第三种规范网址。
答案 0 :(得分:2)
您可以通过使用文件的repo路径调用List commits on a repository端点作为path
参数的值来获取存储库中特定文件的所有贡献者的完整数据:
即,一般形式是:
GET /repos/:owner/:repo/commits?path=:path-to-file
这将返回一个JSON对象,其中包含该文件的所有提交数组。要从每个中获取贡献者名称,您可以选择使用commit.author.name
或commit.committer.name
(取决于您实际需要的那些)或author.login
或committer.login
。
所以这是一个单独的API调用,但只需要获取名称,您需要处理您获得的JSON数据。
以下是在JavaScript中执行此操作的简单示例:
const githubAPI = "https://api.github.com"
const commitsEndpoint = "/repos/csitauthority/CSITauthority.github.io/commits"
const commitsURL = githubAPI + commitsEndpoint
const filepath = "HUGO/content/post/vlan-101.md"
fetch(commitsURL + "?path=" + filepath)
.then(response => response.json())
.then(commits => {
for (var i = 0; i < commits.length; i++) {
console.log(commits[i].commit.author.name)
}
})
&#13;
这是一个如何跳过任何重复名称并以一组唯一名称结尾的示例:
const githubAPI = "https://api.github.com"
const commitsEndpoint = "/repos/csitauthority/CSITauthority.github.io/commits"
const commitsURL = githubAPI + commitsEndpoint
const filepath = "HUGO/content/post/grandfather-problem.md"
fetch(commitsURL + "?path=" + filepath)
.then(response => response.json())
.then(commits => {
const names = [];
for (var i = 0; i < commits.length; i++) {
if (!names.includes(commits[i].commit.author.name)) {
names.push(commits[i].commit.author.name);
}
}
console.log(names.join("\n"));
})
&#13;