Return all items from a Github resource from the API
Posted on Tue 07 July 2020 in dev-journal
If you want to get the list of repos (or any other resource) from Github, the items are paginated once there are more than 30. Here is an example of how you can use a recursive function to follow the pagination and return all items of a particular resource.
Given you have your github api token you can use the following to get a list of repos
base_url = 'https://api.github.com/user/repos?per_page=100'
headers = {'Authorization': 'token {}'.format(github_token)}
repos = parse_github_pagination(baseUrl, headers)
def parse_github_pagination(base_url, headers, github_item=None):
response = requests.get(base_url, headers=headers)
if response.status_code != 200:
github_item = []
else:
if github_item:
github_item.extend(response.json())
else:
github_item = response.json()
links = parse_link_headers(response.headers)
if 'next' in links:
return parse_github_pagination(links['next'], headers, github_item)
else:
return github_item
The base_url
can be changed to get any other resource you need that is
paginated.
For example, here is how you could use the same code above to get all of branches from a repository:
base_url = "https://api.github.com/repos/mikeabrahamsen/posthog/branches?per_page=100"
headers = {'Authorization': 'token {}'.format(github_token)}
branches = parse_github_pagination(baseUrl, headers)