Pygithub: Ada batas 1000 hasil per pencarian.

Dibuat pada 21 Jun 2018  ·  5Komentar  ·  Sumber: PyGithub/PyGithub

API GitHub membatasi pencarian hingga 1000 hasil . Batas ini memengaruhi penelusuran yang dilakukan melalui PyGitHub, seperti GitHub.search_issues .

Sepertinya tidak ada indikasi bahwa pencarian Anda telah mencapai batas ini - tidak ada pengecualian atau kesalahan yang saya ketahui. Mungkin harus ada pengecualian yang muncul ketika ini terjadi (jika dapat dideteksi).

Dimungkinkan untuk mengatasi batas ini dengan mengeluarkan beberapa kueri penelusuran, tetapi kueri tersebut harus disesuaikan agar sesuai dengan tujuan kueri tertentu - misalnya mengulangi search_issues berdasarkan rentang tanggal progresif - dan saya tidak dapat memikirkan cara untuk menggeneralisasi ini.

Adakah pemikiran tentang cara mengatasi ini? Apakah ada solusi umum?

Perhatikan bahwa masalah ini tidak ada hubungannya dengan pembatasan kecepatan atau penomoran halaman hasil.

stale

Komentar yang paling membantu

membuka kembali masalah ini?
dan untuk solusi umum untuk pencarian lain juga

Semua 5 komentar

Berikut adalah solusi yang menunjukkan cara mengambil semua permintaan tarik dalam rentang tanggal, meskipun ada lebih dari 1000 hasil:

EDIT: Saya akan menulis ulang ini menjadi metode yang menghasilkan, daripada kelas, akan lebih sederhana

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")

Dengan kelas ini, Anda sekarang dapat melakukan hal semacam ini:

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)

Membaca dokumen API Github tentang pencarian, saya juga memperhatikan bahwa incomplete_results hilang sebagai bagian dari proses hasil pencarian di PyGithub. Mungkin memasukkan nilai itu mungkin juga sudah membantu mendeteksi apakah hasil pencarian mungkin (dalam) lengkap.

Sekarang saya memiliki PyGithub bercabang dan berjalan secara lokal dari sumber (saya melihat #606) mungkin saya dapat menyelidiki ini lebih lanjut.

Masalah ini secara otomatis ditandai sebagai basi karena tidak ada aktivitas terbaru. Ini akan ditutup jika tidak ada aktivitas lebih lanjut yang terjadi. Terima kasih atas kontribusi Anda.

membuka kembali masalah ini?
dan untuk solusi umum untuk pencarian lain juga

Apakah halaman ini membantu?
0 / 5 - 0 peringkat