作为一种解决方法,您可以使用aliases 构建动态查询,其中包含许多针对特定语言的search 查询和fragments 以避免在查询中重复SearchResultItemConnection:
{
go: search(query: "language:go", type: REPOSITORY, first: 10) {
...SearchResult
}
java: search(query: "language:java", type: REPOSITORY, first: 10) {
...SearchResult
}
javascript: search(query: "language:javascript", type: REPOSITORY, first: 10) {
...SearchResult
}
}
fragment SearchResult on SearchResultItemConnection {
repositoryCount
edges {
node {
... on Repository {
nameWithOwner
forkCount
hasIssuesEnabled
hasProjectsEnabled
homepageUrl
id
}
}
}
}
Try it in the explorer
请注意,它仅适用于 OR 查询(java 或 javascript 或转到语言列表),但不适用于 AND
可以通过编程方式构建请求,例如在 python 脚本中:
import requests
token = "YOUR_TOKEN"
languages = ["go","java","javaScript"]
query = """
{
%s
}
fragment SearchResult on SearchResultItemConnection {
repositoryCount
edges {
node {
... on Repository {
nameWithOwner
forkCount
hasIssuesEnabled
hasProjectsEnabled
homepageUrl
id
}
}
}
}
"""
searchFragments = "".join([
"""
%s: search(query: "language:%s", type: REPOSITORY, first: 10) {
...SearchResult
}
""" % (t,t) for t in languages
])
r = requests.post("https://api.github.com/graphql",
headers = {
"Authorization": f"Bearer {token}"
},
json = {
"query": query % searchFragments
}
)
print(r.json()["data"])