如何为用户的固定存储库对GitHub进行API调用?

时间:2017-04-11 16:59:12

标签: http curl github github-api

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

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

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

enter image description here

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

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

所以我想知道:

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

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

$ ./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 }

3 个答案:

答案 0 :(得分:5)

您可以使用Github GrapQL 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'

答案 1 :(得分: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 :(得分:0)

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

Click here

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

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