2014-02-19 3 views
3

나는 Github 사용자 이름에 액세스 할 수있는 방법을 빌드하고 모든 커밋 또는 적어도 해당 커밋 수를 게시하려고합니다.Github API - 사용자 커밋을 검색 하시겠습니까?

GET user/repo/commit association 또는 직접적인 사용자/커밋에 대한 호출이 있습니까? 1. 특정 이름과 관련된 REPOS를 확보 api.github.com/users/:name/repos 피드

  1. 얻을 : 지금

    , 내가 무엇을 소요하는 것은 다음을 생각 repo 이름.

    api.github.com/repos/:user/:repo1/commits api.github.com/repos/:user/:repo2/commits : 같은 배열

  2. 장소 REPO 이름 api.github.com/repos/:user/:repo3/commits

4.from는 SHA의 수의 카운트를 획득 피드?

답변

2

다른 사람들이 나중에이 문제에 관심을 가질 수 있습니다.

  1. 사용자 한 명이 모든 커밋을 가져 오기위한 API는 없습니다. -> 직접해야합니다.

  2. 당신이 묘사 한 방식은 좋지만, 2와 4에서 그 사용자의 모든 커밋을 얻지 못할 것입니다. JSON을 구문 분석,

    1. 해당 사용자의 저장소를 검색 :

    Github의 API는 https://developer.github.com/v3/repos/commits/#list-commits-on-a-repository

    나의 제안은 다음을 수행하는 것입니다 필터링 저자 커밋의 목록을 얻을 수 있습니다 응답을 생성하고 저장소의 저장소 이름을 배열로 가져옵니다.
    API 링크 - api.github.com/users/:user/repos; replace : 원하는 사용자를 가진 사용자

  3. 각 저장소에 대해 해당 사용자가 작성한 커밋 목록을 가져옵니다.

    API 링크 - api.github.com/repos/:user/repositoryNameFromArray/commits?author=:user; replace : 사용자를 원하는 사용자로 만들고 repositoryNameFromArray가 배열에서 나옵니다.

Github는 기본적으로 마지막 30 개의 커밋 만 검색합니다. 더 큰 청크를 얻으려면 페이지 매김을 사용해야합니다.

끝났습니다. 나머지는 귀하에게 달려 있으며 데이터로 무엇을하고 싶습니까?

3

사용자 리포지토리를 반복하는 것은 다른 리포지토리에서 커밋을하지 못하기 때문에 최적이 아닙니다. 더 좋은 방법은 대신 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, messageurl과 같은 속성에 대한 액세스 권한이 있으므로 distinct 속성을 사용하여 여러 푸시에서 중복 커밋을 제거 할 수 있습니다.

전반적으로 더 많은 법률 업무가 있지만 사용자가 실제로 저지른 것을 훨씬 정확하게 표현할 수 있습니다.

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 
    }) 
:이 도움이 경우

는 여기에 몇 가지 example code 내 마지막 사용자에 대한 커밋 가져 오기 위해 위의 방법을 사용하여 웹 사이트 (Node.js를 사용하여 구현하고 octokat npm module)에서 가져온입니다

관련 문제