Подтвердить что ты не робот

Как получить общий вклад в API Githubs v4

Я просматривал документы API Github V4 API, и я не могу найти способ запросить общие взносы за год (как показано в вашем профиле github). Кто-нибудь сумел использовать новый API для захвата некоторых статистических данных из вашего личного профиля?

Я использую graphQL и токен личного доступа в github, и мне удалось получить минимальные данные профиля пользователя; имя пользователя, имя профиля и т.д.

4b9b3361

Ответ 1

Для этого нет API. Таким образом, есть два пути. Простые данные, соскабливающие пользовательский URL-адрес или цикл через каждого пользователя репо, разворачиваются, а затем подсчитывают вклад. Более поздняя из них будет более трудоемкой. Первый из них гораздо более надежный, поскольку он кэшируется github. Ниже приведен подход python для получения того же

import json
import requests
from bs4 import BeautifulSoup

GITHUB_URL = 'https://github.com/'


def get_contributions(usernames):
    """
    Get a github user public contributions.
    :param usernames: A string or sequence of github usernames.
    """
    contributions = {'users': [], 'total': 0}

    if isinstance(usernames, str) or isinstance(usernames, unicode):
        usernames = [usernames]

    for username in usernames:
        response = requests.get('{0}{1}'.format(GITHUB_URL, username))

        if not response.ok:
            contributions['users'].append({username: dict(total=0)})
            continue

        bs = BeautifulSoup(response.content, "html.parser")
        total = bs.find('div', {'class': 'js-contribution-graph'}).findNext('h2')
        contributions['users'].append({username: dict(total=int(total.text.split()[0].replace(',', '')))})
        contributions['total'] += int(total.text.split()[0].replace(',', ''))

    return json.dumps(contributions, indent=4)

PS: Взято из https://github.com/garnertb/github-contributions

Для более позднего подхода есть пакет npm

https://www.npmjs.com/package/github-user-contributions

Но я бы рекомендовал использовать только метод соскабливания

Ответ 2

Объект ContributionsCollection предоставляет итоговые вклады для каждого типа вкладов между двумя датами.

Примечание: from и to может быть с интервалом не более одного года, для более длительного периода времени делайте несколько запросов.

query ContributionsView($username: String!, $from: DateTime!, $to: DateTime!) {
  user(login: $username) {
    contributionsCollection(from: $from, to: $to) {
      totalCommitContributions
      totalIssueContributions
      totalPullRequestContributions
      totalPullRequestReviewContributions
    }
  }
}