Pygithub: 每次搜索最多只能有 1000 个结果。

创建于 2018-06-21  ·  5评论  ·  资料来源: PyGithub/PyGithub

GitHub API将搜索限制为 1000 个结果。 此限制影响通过 PyGitHub 执行的搜索,例如GitHub.search_issues

似乎没有迹象表明您的搜索已达到此限制 - 我知道没有异常或错误。 发生这种情况时,也许应该引发异常(如果可以检测到)。

可以通过发出多个搜索查询来解决此限制,但必须对此类查询进行定制以适应查询的特定目标 - 例如按渐进日期范围迭代 search_issues - 我想不出一种方法来概括这一点。

关于如何解决这个问题的任何想法? 有没有通用的解决方案?

请注意,此问题与速率限制或结果分页无关。

stale

最有用的评论

重新打开这个问题?
以及其他搜索的通用解决方案

所有5条评论

这是一个解决方法,演示如何检索某个日期范围内的所有拉取请求,即使结果超过 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),也许我可以进一步调查这一点。

此问题已自动标记为陈旧,因为它最近没有活动。 如果没有进一步的活动发生,它将被关闭。 感谢你的贡献。

重新打开这个问题?
以及其他搜索的通用解决方案

此页面是否有帮助?
0 / 5 - 0 等级