Поиск общих вкладов пользователя из API Github

Я пытаюсь извлечь информацию ниже для любого пользователя из github.

enter image description here

Есть ли способ /api, открытый в github-api, где мы можем получить эту информацию напрямую?

Ответ 1

Это, вероятно, не решение, которое вы ищете, но созданный массив содержит всю необходимую информацию:

curl https://github.com/users/ankit8898/contributions_calendar_data

Я уверен, что вы ищете решение, которое элегантно, чем это.

ОБНОВЛЕНИЕ Похоже, что это не последний способ получить данные участников. Пожалуйста, посмотрите в другом месте на StackOverflow для правильного ответа.

Ответ 2

Вы можете получить календарь с SVG https://github.com/users/<USER>/contributions с to параметра URL, как:

https://github.com/users/bertrandmartel/contributions?to=2016-12-31

Вы можете использовать базовый xml-анализатор для суммирования всех вкладов svg.

Пример с & для 2016 года:

curl -s "https://github.com/users/bertrandmartel/contributions?to=2016-12-31" | \
     xmlstarlet sel -t -v "sum(/svg/g/g/rect/@data-count)"

Ответ 3

Вы можете использовать эту функцию для извлечения вкладов за прошлый год (клиент):

function getContributions(){
    const svgGraph = document.getElementsByClassName('js-calendar-graph')[0];
    const daysRects = svgGraph.getElementsByClassName('day');
    const days = [];

    for (let d of daysRects){
        days.push({
           date: d.getAttribute('data-date'),
           count: d.getAttribute('data-count')
        }); 
    }

    return days;    
}

Я также написал небольшой узел модуля, который может "извлечь" вклады
@simonwep/GitHub-вклады

Может быть, это поможет вам (даже я опоздал на 4 года)

Ответ 4

Для этого вы можете использовать API GitHub Events:

Пример (node.js)

const got = require('got')

async function getEvents(username) {
  const events = []
  let page = 1

  do {
    const url = 'https://api.github.com/users/${username}/events?page=${page}'
    var { body } = await got(url, {
      json: true
    })
    page++
    events.push(...body)
  } while(!body.length)

  return events
}

(async () => {
  const events = await getEvents('handtrix')

  console.log('Overall Events', events.length)
  console.log('PullRequests', events.filter(event => event.type === 'PullRequestEvent').length)
  console.log('Forks', events.filter(event => event.type === 'ForkEvent').length)
  console.log('Issues', events.filter(event => event.type === 'IssuesEvent').length)
  console.log('Reviews', events.filter(event => event.type === 'PullRequestReviewEvent').length)
})()

Документация