迭代通过用户的存储库是次优的,因为它错过了他们在其他存储库中提交的任何提交。更好的方法是使用Events API。
的第一步是get the user's events:
GET /users/:username/events
接下来,您需要通过返回的事件进行迭代,检查项目where result.type
is set to PushEvent
。其中每一个对应于用户的git push
,并且该推送的提交可用(按照反向时间顺序)为result.payload.commits
。
您可以通过检查commit.author.email
与您的预期匹配来过滤掉其他用户提交的任何提交。您还可以访问该对象上的sha
,message
和url
等属性,并且可以使用distinct
属性消除跨多次推送的重复提交。
整体而言,涉及的工作量更多,但它也能让您更准确地表达用户实际承诺的内容。
万一有帮助,这里的一些example code从我的网站,它使用上面的方法来获取最后一次提交的用户(使用Node.js的实施和octokat
npm module)采取:
const USER = 'TODO: your GitHub user name'
const EMAIL = 'TODO: your GitHub email address'
const github = require('octokat')({ token: 'TODO: your GitHub API token' })
return github.fromUrl(`https://api.github.com/users/${USER}/events`)
.fetch()
.then(events => {
let lastCommit
events.some(event => {
return event.type === 'PushEvent' && event.payload.commits.reverse().some(commit => {
if (commit.author.email === EMAIL) {
lastCommit = {
repo: event.repo.name,
sha: commit.sha,
time: new Date(event.createdAt),
message: commit.message,
url: commit.url
}
return true
}
return false
})
})
return lastCommit
})