An easy to use github api client for PHP.
You need php 5.4 or higher to use this library.
- very easy to use and ide-friendly
- pure object oriented interface
- automatically handled pagination
- psr-2
Install via composer: composer require mpscholten/github-api v0.3
{
"require": {
"mpscholten/github-api": "v0.3"
}
}
To use oauth just pass your oauth token to Github::create()
like this.
<?php
use MPScholten\GitHubApi\Github;
$github = Github::create('oauth token');
If you want to use the public api without any authentication you can do this by just calling Github::create
without any arguments.
<?php
use MPScholten\GitHubApi\Github;
$github = Github::create();
In case you are using oauth you can get the current logged-in user by calling
$user = Github::create('oauth token')->getCurrentUser();
Otherwise you can get users by their github username.
$user = Github::create()->getUser('mpscholten');
With the user object you can now do
$user->getEmail();
$user->getName();
$user->getUrl();
$user->getAvatarUrl();
// ...
// relations
$user->getRepositories(); // returns an array of Repositories owned by the user
$user->getOrganizations();
// list the users repositories
foreach ($user->getRepositories() as $repository) {
echo $repository->getName();
}
// with the 'user:email' oauth scope
$user->getPrimaryEmail();
$user->getEmails();
foreach ($user->getEmails() as $email) {
if ($email->isVerified()) {
echo $email;
}
}
$repository = Github::create()->getRepository('mpscholten', 'github-api');
$repository->getName();
$repository->getCommits();
$repository->getBranches();
$repository->getOwner(); // returns a user object
$repository->getOwner()->getName(); // chaining
// list the collaborators of the repo
foreach ($repository->getCollaborators() as $collaborators) {
echo $collaborators->getName();
}
foreach ($user->getOrganizations() as $org) {
$org->getName(); // e.g. GitHub
$org->getLocation(); // e.g. San Francisco
}
You can use the search api by calling $github->getSearch()
// this is equals to https://github.com/search?q=language%3Aphp+&type=Repositories&ref=searchresults
foreach (Github::create()->getSearch()->findRepositories('language:php') as $repo) {
$repo->getName();
// ...
}
foreach ($repository->getReleases() as $release) {
$release->getUrl(); // https://github.com/octocat/Hello-World/releases/v1.0.0
$release->getUrl('zipball'); // https://api.github.com/repos/octocat/Hello-World/zipball/v1.0.0
$release->getCreatedAt()->format('Y-m-d H:i:s');
}
foreach ($repository->getIssues() as $issue) {
$issue->getLabels()->count();
$issue->getNumber(); // 2
$issue->getAuthor()->getLogin(); // "mpscholten"
$issue->getTitle(); // "Add Issue-API"
$issue->getBody();
$issue->isOpen();
$issue->isClosed();
$issue->getState();
}
Don't worry about pagination, all paginated collections are using a custom Iterator
so we can automatically load more results if you need them. So you can focus on what you really want to do.
Example This will print you all commits of the repository.
foreach ($repository->getCommits() as $commit) {
echo $commit->getMessage() . "\n";
}
It's builtin! By default we will use in-memory caching but you might want to use file caching. Just pass your cache directory to Github::create()
, like this
<?php
use MPScholten\GitHubApi\Github;
$github = Github::create('oauth token', 'my-cache-dir/');
$ phpunit
Feel free to send pull request!