如何从GitHub的GraphQL查询所有语言

7

我正在尝试使用GitHub的v4 GraphQL查询关于存储库的信息。其中一个我想查询的内容是存储库中使用的所有语言的分布情况,或者如果可能的话,用户所有存储库中语言的分布情况。我尝试了以下代码片段,但它返回null,而主要语言则返回主要语言。

languages: {
  edges: {
    node: {
      name
    }
  }
}

我找到的与语言相关的唯一信息是主要语言。但我想显示一个用户在单个存储库或跨其所有存储库中使用的所有语言的统计数据。

2个回答

11
你缺少切片字段,你可以在这里放置first: 100以获取存储库的前100种语言:
{
  user(login: "torvalds") {
    repositories(first: 100) {
      nodes {
        primaryLanguage {
          name
        }
        languages(first: 100) {
          nodes {
            name
          }
        }
      }
    }
  }
}

如果你想要按语言统计数据(例如,你想知道哪些是第二、第三种语言等),很抱歉目前 GraphQL API 不支持这个功能,但可以使用“列出语言API”,例如:https://api.github.com/repos/torvalds/linux/languages


6
我想指出另外一个可能会有所帮助的方面。
您可以通过查看语言的大小(即主要语言,次要语言等)来获取更多详细信息。将整个仓库的totalSize与其每种语言的size进行比较。
以下是一个查询示例(pytorch),可获取您需要的数据。将其放入GH's GQL Explorer中以进行检查。
{
  repository(name: "pytorch", owner: "pytorch") {
    languages(first: 100) {
      totalSize
      edges {
        size
        node {
          name
          id
        }
      }
    }
  }
}

您将得到以下形式的输出。
{
  "data": {
    "repository": {
      "languages": {
        "totalSize": 78666590,
        "edges": [
          {
            "size": 826272,
            "node": {
              "name": "CMake",
              "id": "MDg6TGFuZ3VhZ2U0NDA="
            }
          },
          {
            "size": 29256797,
            "node": {
              "name": "Python",
              "id": "MDg6TGFuZ3VhZ2UxNDU="
            }
          }, ...

要获取每种语言的百分比,只需执行 size / totalSize * 100。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接