如何从 GitHubs graphql 查询所有语言

Mik*_*eft 2 github github-api graphql github-graphql

我正在尝试使用他们的 v4 graphql 查询 GitHub 以获取有关存储库的信息。我想查询的一件事是 repo 中使用的所有语言的细分。或者,如果可能的话,对用户所有存储库中的语言进行细分。我尝试了以下代码段,但它返回 null,其中主要语言返回主要语言

languages: {
  edges: {
    node: {
      name
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我能找到的唯一与语言有关的东西是主要语言。但是我想显示用户的统计信息以及他们在单个存储库中或跨存储库使用的所有语言。

Ber*_*tel 6

您缺少切片字段,您可以在此处输入first: 100以获取存储库的前 100 种语言:

{
  user(login: "torvalds") {
    repositories(first: 100) {
      nodes {
        primaryLanguage {
          name
        }
        languages(first: 100) {
          nodes {
            name
          }
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

如果您想获得每种语言的统计信息(例如,如果您想知道哪种语言是第二种、第三种语言等...)我恐怕目前无法使用 graphql API 但使用List Languages API Rest例如https ://api.github.com/repos/torvalds/linux/languages


小智 6

我想指出其他可能有帮助的事情。

您可以通过查看该语言来获取有关该语言(即主要语言、次要语言等)的更多详细信息sizetotalSize将整个存储库的 与size它所拥有的每种语言的进行比较。

以下查询(pytorch 示例)将获取您需要的数据。将其放入GH 的 GQL Explorer中进行查看。

{
  repository(name: "pytorch", owner: "pytorch") {
    languages(first: 100) {
      totalSize
      edges {
        size
        node {
          name
          id
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

您将得到以下形式的输出

{
  "data": {
    "repository": {
      "languages": {
        "totalSize": 78666590,
        "edges": [
          {
            "size": 826272,
            "node": {
              "name": "CMake",
              "id": "MDg6TGFuZ3VhZ2U0NDA="
            }
          },
          {
            "size": 29256797,
            "node": {
              "name": "Python",
              "id": "MDg6TGFuZ3VhZ2UxNDU="
            }
          }, ...
Run Code Online (Sandbox Code Playgroud)

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