Olá, pessoal, tudo bem? Estou passando aqui para mostrar como eu fiz o desafio de otimizar a paginação dos repositórios.
A minha ideia foi utilizar um loop infinito, onde o critério de parada seria quando o JSON da resposta estivesse vazio, indicando que ali não havia mais informações. Dessa forma, não é preciso enviar requisição inicial para obter o total de repositórios e realizar a conta para achar quantidade de páginas.
# Função para extrair a lista de repositórios do github daquele usuário (owner)
def list_repos(self):
url = f'{self.api_base_url}/users/{self.owner}/repos'
# Altera o total de informações por página, que por padrão é 30, para 100
params = { "per_page" : 100 }
page_num = 1
repos_list = []
while True:
try:
url_page = f'{url}?page={page_num}'
response = requests.get(url_page, headers=self.headers, params=params)
# Condição de parada
# Aqui poderia ser if len(response.json()) == 0
# ou if response.json() = []
if not len(response.json()):
break
# Se a condição de parada não foi atingida, continua a execução do código
repos_list.extend(response.json())
print(url_page)
# Altera o número da página
page_num += 1
except:
repos_list.append(None)
return repos_list