清风迷人 2021-04-27 11:11 采纳率: 50%
浏览 16

GitHub GraphQL API怎么在仓库没有Release的情况下获取仓库的所有tag?

'''
query { 
  repository(owner:"madler", name:"zlib") {
      releases(last:100) {
      		totalCount
          nodes {
              name
              tagName
          }
          pageInfo {
              startCursor
              hasPreviousPage
          }
      }
  }
}
'''

我是这样查询的,但是遇到没有Release的仓库就获取不到内容,比如madler/zlib这个仓库

  • 写回答

1条回答 默认 最新

  • ζ小菜鸡 Python领域优质创作者 2023-05-11 12:54
    关注

    在没有Release的情况下获取仓库的所有tag可以通过以下步骤:

    1.使用GitHub GraphQL API中的repository查询来获取仓库的所有标签(tag)和提交(commit)的SHA值,示例查询如下:

    query {
      repository(owner: "owner_name", name: "repo_name") {
        refs(refPrefix: "refs/tags/", first: 100, orderBy: {field: TAG_COMMIT_DATE, direction: DESC}) {
          edges {
            node {
              name
              target {
                ... on Commit {
                  oid
                }
              }
            }
          }
        }
      }
    }
    

    在查询中,我们使用了refs来获取仓库中所有的标签,refPrefix参数用于指定查询的前缀为refs/tags/,first参数用于指定最多返回的标签数目,orderBy参数用于指定标签的排序方式,这里我们按标签的提交日期进行降序排序。

    2.对查询结果进行处理,提取出所有的标签名称和对应的提交SHA值。
    示例代码如下:

    import requests
    
    def get_all_tags(owner, repo):
        query = """
        query {
          repository(owner: "%s", name: "%s") {
            refs(refPrefix: "refs/tags/", first: 100, orderBy: {field: TAG_COMMIT_DATE, direction: DESC}) {
              edges {
                node {
                  name
                  target {
                    ... on Commit {
                      oid
                    }
                  }
                }
              }
            }
          }
        }
        """ % (owner, repo)
    
        response = requests.post('https://api.github.com/graphql', json={'query': query},
                                 headers={'Authorization': 'bearer YOUR_ACCESS_TOKEN'})
    
        data = response.json()
        tags = []
        for edge in data['data']['repository']['refs']['edges']:
            tag_name = edge['node']['name']
            commit_sha = edge['node']['target']['oid']
            tags.append((tag_name, commit_sha))
    
        return tags
    
    # 示例查询
    tags = get_all_tags("owner_name", "repo_name")
    print(tags)
    

    以上代码中,我们使用了Python requests库来向GitHub GraphQL API发送查询请求,其中YOUR_ACCESS_TOKEN需要替换成你自己的GitHub Access Token。查询结果中的data字段包含了所有标签的名称和对应的提交SHA值,我们将它们提取出来并以元组的形式存储在tags列表中返回。

    注意:如果仓库过多,可能需要使用分页查询来获取所有标签。

    评论 编辑记录

报告相同问题?

悬赏问题

  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探