【问题标题】:How do I make an API call to GitHub for a user's pinned repositories?如何为用户的固定存储库对 GitHub 进行 API 调用?
【发布时间】:2021-03-23 05:28:09
【问题描述】:

在 GitHub 上,用户可以拥有pinned repositories

API 的 Repositories 部分还描述了如何发出涉及 repos 的请求。您还可以获取有关用户所属组织的信息,如another answer 中所述(可以固定)。

但是,我想访问用户的固定存储库。例如给定以下配置文件:

我希望能够做到以下几点:

$ curl -s <some endpoint with some parameters> | <some pipeline with some filtering>
str
liffy_diffy
spiralify
micro-twitter
kit
xdoc

所以我想知道:

  • 我需要什么端点和参数来获取用户的固定存储库?

我能够使用 nokogiri gem 来解析 html。但是,似乎我应该是通过一个简单的 HTTP 请求来完成同样事情的 api:

$ ./get_user_pinned_repos mbigras
str
liffy_diffy
spiralify
micro-twitter
kit
xdoc

代码:

#!/usr/bin/env ruby
# get a user's pinned repos
require 'rubygems'
require 'nokogiri'
require 'open-uri'

if ARGV.length != 1
  STDERR.puts "usage: get_user_pinned_repos <username>"
  exit 1
end

username = ARGV.first
profile_url = "https://github.com/#{username}"
page = Nokogiri::HTML(open(profile_url))
page.css("span.repo").each { |repo| puts repo.text }

【问题讨论】:

    标签: http curl github github-api


    【解决方案1】:

    对原始答案的更新:

    GitHub GraphQL 模式 (2019-03-30) 的 changelog 提到 pinnedRepositories 将在 2019-07-01 之前被弃用或删除。 GraphQL API 用户请改用ProfileOwner.pinnedItems

    使用ProfileOwner.pinnedItems 检索固定存储库的示例:

    示例 1:

    query {
        user(login:"kranthilakum") {
            pinnedItems(first: 5, types: [REPOSITORY, GIST]) {
                totalCount
                edges {
                    node {
                        ... on Repository {
                        name
                        }
                    }
                }
            }
        }
    }
    

    Try Example 1 in the GraphQL API Explorer

    示例 2:

    query {
      repositoryOwner(login: "kranthilakum") {
        ... on ProfileOwner {
          pinnedItemsRemaining
          itemShowcase {
            items(first: 5) {
              totalCount
              edges {
                node {
                  ... on Repository {
                    name
                  }
                }
              }
            }
            hasPinnedItems
          }
        }
      }
    }
    

    Try Example 2 in GraphQL API Explorer

    【讨论】:

      【解决方案2】:

      过时

      您可以使用Github GraphQL API 获取固定存储库:

      {
        repositoryOwner(login: "bertrandmartel") {
          ... on User {
            pinnedRepositories(first:6) {
              edges {
                node {
                  name
                }
              }
            }
          }
        }
      }
      

      Try it in the explorer

      您可以通过 请求它:

      curl -H "Authorization: bearer TOKEN" --data-binary @- https://api.github.com/graphql <<EOF
      {
       "query": "query { repositoryOwner(login: \"bertrandmartel\") { ... on User { pinnedRepositories(first:6) { edges { node { name } } } } } }"
      }
      EOF
      

      您可以使用jq JSON 解析器解析 JSON 输出:

      username=bertrandmartel
      curl -s -H "Authorization: bearer TOKEN" \
           -d '{ "query": "query { repositoryOwner(login: \"'"$username"'\") { ... on User { pinnedRepositories(first:6) { edges { node { name } } } } } }" }' \
           https://api.github.com/graphql | \
           jq -r '.data.repositoryOwner.pinnedRepositories.edges[].node.name'
      

      【讨论】:

      • message":"“用户”类型上不存在字段“pinnedRepositories”
      【解决方案3】:

      转到此 URL 并输入您的用户名,然后点击“开始”按钮。在那里,您将看到您固定的存储库作为 JSON 响应。

      Click here

      或者,您可以在下面的链接中替换您的用户名。

      https://gh-pinned-repos-5l2i19um3.vercel.app/?username={Username}
      

      更多信息:点击herehere

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-26
        • 2018-04-24
        • 2019-04-28
        • 1970-01-01
        • 2022-11-11
        • 2019-04-13
        • 2013-10-19
        • 1970-01-01
        相关资源
        最近更新 更多