如何解决GitHub GraphQL过滤器多变量语言过滤器
我正在尝试使用GitHub的GraphQL API查找与查询匹配但仅限于特定语言的存储库列表。但是,我在文档中找不到与典型的在线搜索支持的多变量语言过滤器有关的任何内容,或者在GraphQL上通常无法完成类似的工作。
{
search(query: "language:java",type: REPOSITORY,first: 10) {
repositoryCount
edges {
node {
... on Repository {
nameWithOwner
forkCount
hasIssuesEnabled
hasProjectsEnabled
homepageUrl
id
}
}
}
}
}
我想在语言上传递两个参数并显示结果,但是此query
仅使用字符串进行搜索。我需要像这样的多个项目发送请求
language:['go','java','javaScript']
解决方法
作为一种解决方法,您可以使用aliases来构建动态查询,并使用许多针对特定语言的search
查询和fragments来避免在查询中重复SearchResultItemConnection
:
{
go: search(query: "language:go",type: REPOSITORY,first: 10) {
...SearchResult
}
java: search(query: "language:java",first: 10) {
...SearchResult
}
javascript: search(query: "language:javascript",first: 10) {
...SearchResult
}
}
fragment SearchResult on SearchResultItemConnection {
repositoryCount
edges {
node {
... on Repository {
nameWithOwner
forkCount
hasIssuesEnabled
hasProjectsEnabled
homepageUrl
id
}
}
}
}
请注意,它仅适用于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",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"])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。