リポジトリ取得など複数ページに渡る結果を複数回リクエストし、json結果を結合して返す。
成果物
ソースコード
一部抜粋。
Main.py
from github import GitHub username = "github_username" db_path_account = "C:/GitHub.Accounts.sqlite3" db_path_api = "C:/GitHub.Apis.sqlite3" g = GitHub.GitHub(db_path_account, db_path_api, username) res = g.repo.list(type='all', sort='created', direction='asc', per_page=100)
上記の場合、100件を超えるリポジトリがあると複数ページになる。
Pagenation.py
次のページがある限り、再帰で繰り返しリクエストする。このとき、1リクエストあたり2秒間待機する。サーバ負荷(リクエスト上限)対策である。
def pagenate(self, r, res): ... r2 = requests.get(r.links["next"]["url"], **params) ... time.sleep(2) self.pagenate(r2, res) ...
所感
基本的にPythonが分かっていない。良い書き方もわからない。認証、APIクライアント、データベースの階層付け、モジュール分け、クラス分けが難しい。GitHubAPIの機能をすべて把握できていないことも原因か。たとえばOTPを更新するところ(RequestParam.update_otp()
)が、いかにも取って付けたようで無様。