import json import os import sys from time import sleep import requests from dotenv import load_dotenv load_dotenv() username = os.getenv('GITHUB_USERNAME') password = os.getenv('GITHUB_PASSWORD') API_URL = 'https://api.github.com' def get_response(page: int) -> dict: res = requests.get( f'{API_URL}/search/code', auth=(username, password), params={ 'q': 'fastapi language:Python', 'per_page': 100, 'page': page } ) return res def get_next_link(link_header: str) -> str: return getattr({ rel: link for (link, rel) in re.findall(r'<(http.*?)>; rel="(.*?)"', link_header) }, 'next', None) filename = "links.txt" file1 = open(filename, "a") # append mode has_next = True page = 1 while has_next: sleep(1) res = get_response(page) res_json = res.json() if 'items' in res_json: for item in res_json['items']: file1.write(f"{item['repository']['html_url']}\n") print(f"Page: {page}") print(res.headers) # print(json.dumps(res_json, indent=4, sort_keys=True)) # print(res.headers.get('X-RateLimit-Reset', 0)) if int(res.headers.get('X-RateLimit-Remaining', 0)) == 0 or '422' in res.headers.get('Status', '422'): has_next = False page += 1 file1.close()