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)
検索に関するGithubAPIドキュメントを読むと、PyGithubの検索結果プロセスの一部としてincomplete_results
が欠落していることにも気付きました。 おそらく、その値を含めることは、検索結果が(不完全な)不完全であるかどうかを検出するのにもすでに役立つ可能性があります。
PyGithubがフォークされ、ソースからローカルで実行されているので(#606を見ています)、おそらくこれをさらに調査することができます。
この問題は、最近のアクティビティがないため、自動的に古いものとしてマークされています。 それ以上のアクティビティが発生しない場合は閉じられます。 貢献していただきありがとうございます。
この問題を再度開きますか?
他の検索の一般的な解決策についても同様です
最も参考になるコメント
この問題を再度開きますか?
他の検索の一般的な解決策についても同様です