GitHub API将搜索限制为 1000 个结果。 此限制影响通过 PyGitHub 执行的搜索,例如GitHub.search_issues 。
似乎没有迹象表明您的搜索已达到此限制 - 我知道没有异常或错误。 发生这种情况时,也许应该引发异常(如果可以检测到)。
可以通过发出多个搜索查询来解决此限制,但必须对此类查询进行定制以适应查询的特定目标 - 例如按渐进日期范围迭代 search_issues - 我想不出一种方法来概括这一点。
关于如何解决这个问题的任何想法? 有没有通用的解决方案?
请注意,此问题与速率限制或结果分页无关。
这是一个解决方法,演示如何检索某个日期范围内的所有拉取请求,即使结果超过 1000 个:
编辑:我将把它改写为一个更简单的方法,而不是一个类
class PullRequestQuery:
def __init__(self, git, repo, since, until):
self.git = git
self.repo = repo
self.until = until
self.issues = self.__query(since, until)
def __iter__(self):
skip = False
while True:
results = False
for issue in self.issues:
if not skip:
results = True
yield issue.as_pull_request()
skip = False
# If no more results then stop iterating.
if not results:
break
# Start new query picking up where we left off. Previous issue will be first one returned, so skip it.
self.issues = self.__query(issue.closed_at.strftime('%Y-%m-%dT%H:%M:%SZ'), self.until)
skip = True
def __query(self, since, until):
querystring = 'type:pr is:closed repo:%s/%s closed:"%s..%s"' % (self.repo.organization.login, self.repo.name, since, until)
return self.git.search_issues(query=querystring, sort="updated", order="asc")
有了这个类,你现在可以做这样的事情:
git = Github(user, passwd)
org = git.get_organization(orgname)
repo = org.get_repo(reponame)
for pull in PullRequestQuery(git, repo, "2017-01-01", "2017-12-31"):
print "%s: %s" % (pull.number, pull.title)
阅读关于搜索的 Github API 文档,我还注意到incomplete_results
作为 PyGithub 中搜索结果处理的一部分丢失了。 可能包含该值也可能已经有助于检测搜索结果是否(不)完整。
既然我已经将 PyGithub 分叉并从源代码本地运行(我正在查看 #606),也许我可以进一步调查这一点。
此问题已自动标记为陈旧,因为它最近没有活动。 如果没有进一步的活动发生,它将被关闭。 感谢你的贡献。
重新打开这个问题?
以及其他搜索的通用解决方案
最有用的评论
重新打开这个问题?
以及其他搜索的通用解决方案