获取所有公共用户贡献,又名“日历数据”(github api v3)

arc*_*ryx 5 curl github github-api

我发现了很多线程——甚至有几个项目使用 github api 之外的 api 嵌入了贡献日历——但这些方法或线程都没有真正回答这个问题。有一件事很接近,但这是不可能的。

我只是想获取用户的贡献总数,如 github 个人资料页面上的日历所示,如下所示......

在此输入图像描述

api 文档描述了收集 Repo Contrib 数据,因此我尝试用有根据的猜测盲目地尝试 api,但没有成功。有谁知道这个数据实际上是否有一个可行的端点?我真的需要自己计算这些信息还是做一些肮脏的 html 抓取废话?这看起来很愚蠢...有人吗?

更新:对于任何寻求快速网络抓取解决方案的人来说,这是一个使用cheerio和正则表达式的解决方案

const axios = require('axios')
const cheerio = require('cheerio')
const url = 'https://github.com/archae0pteryx'

function getCommits(url) {
    return new Promise((resolve, reject) => {
        axios.get(url).then(res => {
            const load = cheerio.load(res.data)
            const parsed = load('div.js-contribution-graph > h2').text()
            const reg = /\d+/g
            const x = parsed.match(reg)
            resolve(x)
        }).catch(err => reject(err))
    })
}


getCommits(url)
    .then(x => console.log(x))
    .catch(err => console.error(err))
Run Code Online (Sandbox Code Playgroud)

Ber*_*tel 3

使用 GraphQL v4

如果可以选择使用graphql API,您可以使用tributionsConnection来获取特定时间段内的贡献总数:

{
  viewer {
    contributionsCollection(from: "2020-01-01T00:00:00", to: "2020-12-01T00:00:00") {
      contributionCalendar {
        totalContributions
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

输出 :

{
  "data": {
    "viewer": {
      "contributionsCollection": {
        "contributionCalendar": {
          "totalContributions": 118
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

解析日历 svg

您可以用来xmlstarlet解析从日历 svg 中获取的 XML 文件: https: //github.com/users/archae0pteryx/contributions

比抓取 GitHub 网站更好,但仍然无法使用官方 API:

curl -s "https://github.com/users/archae0pteryx/contributions" | \
     xmlstarlet sel -t -v "sum(//svg/g/g/rect/@data-count)"
Run Code Online (Sandbox Code Playgroud)