【GitHub API】获取gist的星星数量【使用GitHub CLI(gh命令)获取stargazers】

我想通过调用API,而不是对GitHub上的HTML进行爬取,来获取附加在gist上的星星数量(“点赞”数、stargazers)。

然而,GitHub API v3 的 Gists 端点仅有”/gists/{gist_id}/star”端点来判断是否被加星。即使通过”github API “gist” how to get stargazers”搜索也只能找到大量关于如何网页爬取的方法,而且要随时跟进布局变化(类名变化)也很麻烦。

由于在API上无法立即找到敲取和获取的方法,我决定利用自己的搜索能力。

太长;没看(今北産業)

    1. 可以使用GitHub API v4的GraphQL API。

使用GraphQL进行Viewer查询–>Gist对象–>引用stargazerCount字段。

如果使用GitHub CLI的gh命令,则可以使用gh api graphql子命令进行GraphQL请求。

#!/bin/bash

QUERY='
query {
  viewer {
    gist (name: "5b10b34f87955dfc86d310cd623a61d1" ) {
        stargazerCount
    }
  }
}
'
TEMPLATE='{{.data.viewer.gist.stargazerCount}}'

# 要 `gh auth login` 済み
gh api graphql -f query="${QUERY}" --template="${TEMPLATE}"

# Output:
# 2

简短概括:

#!/bin/bash
# shellcheck disable=SC2016

# 最初の 10 件の gist のスター数を取得する例
QUERY1='
query {
  viewer {
    gists (first: 10, orderBy: {field: CREATED_AT, direction: DESC} ) {
        nodes {
            createdAt
            description
            name
            pushedAt
            stargazers (first: 100) {
            totalCount
            edges {
                node {
                id
                }
            }
            }
            updatedAt
        }
    }
  }
}
'
TEMPLATE1='
  {{- range $repo := .data.viewer.gists.nodes -}}
    {{- printf "name: %s - stargazers: %v\n" $repo.name $repo.stargazers.totalCount -}}
  {{- end -}}
'

gh api graphql -f query="${QUERY1}" --paginate --template="${TEMPLATE1}"

echo "----------------------------------"

# 指定した gist ID のスター数を取得する例
QUERY2='
query {
  viewer {
    gist (name: "5b10b34f87955dfc86d310cd623a61d1" ) {
        name
        stargazerCount
    }
  }
}
'
TEMPLATE2='
    {{- printf "name: %s - stargazers: %v\n" .data.viewer.gist.name .data.viewer.gist.stargazerCount -}}
'

gh api graphql -f query="${QUERY2}" --paginate --template="${TEMPLATE2}"

# Output:
# name: 7101f542be23e5048198e2a27c3cfda8 - stargazers: 0
# name: d5b9800c636dd78defa4f15894d54d29 - stargazers: 0
# name: e915aa8c01dd438e3ffd79b05f15a4ff - stargazers: 0
# name: 83e82d243b9b3d9ffbf370010ad658c3 - stargazers: 0
# name: 9cbad9941ad797b8d75123e40f7fd4c8 - stargazers: 0
# name: 76857bc6339515d7144e00f17adb1090 - stargazers: 1
# name: 5fd419de98e58b650ad279d6c1266179 - stargazers: 1
# name: cb4dbde222fb494405bb522692235456 - stargazers: 1
# name: f15d018ceb6d2a2103c581b41530ad49 - stargazers: 0
# name: a821517a85992fe329489db2ce32bd56 - stargazers: 0
# ----------------------------------
# name: 5b10b34f87955dfc86d310cd623a61d1 - stargazers: 2

文献引用

GitHub API v4 (GraphQL API)

Gist object

Simple User Gists Query Using GitHub GraphQL API (v4 API) @ Gist

script.sh extension | cmd | GitHub CLI @ GitHub

Get GitHub Gist Stargazer Count @ StackOverflow

GitHub Search API: Get the number of stars for a repository @ Gist

广告
将在 10 秒后关闭
bannerAds