Skip to content

Pagination

Miloslav Hůla edited this page Dec 4, 2021 · 5 revisions

The GitHub API documentation describes how to deal with a traversing over huge amount of data.

Warning!

Pagination easily wipes out your rate limit. Using the CachedClient and Paginator::limit() (described below) helps you.

Api::paginator()

This is a shortcut for a Milo\Github\Paginator creation for GET requests. The method arguments are the same as for Api::get().

foreach ($api->paginator('/repos/nette/di/commits')->limit(10) as $response) {
    var_dump($api->decode($response));
}

Paginator

Class Milo\Github\Paginator helps you to iterate throught the GitHub API. It implements PHP Iterator, so it is easily usable with foreach() loop. Method limit() limits the iteration loop. Iteration stops when exceeded.

use Milo\Github;

$api = new Github\Api;
$request = $api->createRequest(
    Github\Http\Request::HEAD, '/repos/{owner}/{repo}/commits',
    [
        'owner' => 'nette',
        'repo' => 'nette',
        'page' => 4,
        'per_page' => 5,
    ]
);

$paginator = new Github\Paginator($api, $request);
foreach ($paginator->limit(5) as $page => $response) {
    ...
}

Class contains few static methods which help you with a manual pagination:

  • Paginator::parsePage($url)
  • Paginator::parseLink($link, $rel)
Clone this wiki locally