A simple, Object Oriented API wrapper for GitHub written with PHP5.
Uses GitHub API v2.
Requires php curl.
If the method you need does not exist yet, dont hesitate to request it with an issue!
$github = new phpGitHubApi();
This step is facultative, as most of GitHub services do not require authentication.
$github->authenticate('ornicar', 'my-token');
Next requests will use the user "ornicar", instead of anonymous access.
Cancels authentication.
$github->deAuthenticate();
Next requests will use anonymous access.
Searching users, getting user information and managing authenticated user account information. Wrap GitHub User API.
$users = $github->getUserApi()->search('ornicar');
Returns an array of users as described in http://develop.github.com/p/users.html#searching_for_users
$user = $github->getUserApi()->show('ornicar');
Returns an array of information about the user as described in http://develop.github.com/p/users.html#getting_user_information
Change user attributes: name, email, blog, company, location. Requires authentication.
$github->getUserApi()->update('ornicar', array('location' => 'France', 'blog' => 'http://diem-project.org/blog'));
Returns an array of information about the user as described in http://develop.github.com/p/users.html#authenticated_user_management
$users = $github->getUserApi()->getFollowing('ornicar');
Returns an array of followed users as described in http://develop.github.com/p/users.html#following_network
$users = $github->getUserApi()->getFollowers('ornicar');
Returns an array of following users as described in http://develop.github.com/p/users.html#following_network
Make the authenticated user follow a user. Requires authentication.
$github->getUserApi()->follow('symfony');
Returns an array of followed users as described in http://develop.github.com/p/users.html#following_network
Make the authenticated user unfollow a user. Requires authentication.
$github->getUserApi()->unFollow('symfony');
Returns an array of followed users as described in http://develop.github.com/p/users.html#following_network
$users = $github->getUserApi()->getWatchedRepos('ornicar');
Returns an array of watched repos as described in http://develop.github.com/p/users.html#watched_repos
$emails = $github->getUserApi()->getEmails();
Returns an array of the authenticated user emails. Requires authentication.
$github->getUserApi()->addEmail('my-email@provider.org');
Returns an array of the authenticated user emails. Requires authentication.
$github->getUserApi()->removeEmail('my-email@provider.org');
Return an array of the authenticated user emails. Requires authentication.
Listing issues, searching, editing and closing your projects issues. Wrap GitHub Issue API.
$issues = $github->getIssueApi()->getList('ornicar', 'php-github-api', 'open');
Returns an array of issues as described in http://develop.github.com/p/issues.html#list_a_projects_issues
$issues = $github->getIssueApi()->search('ornicar', 'php-github-api', 'closed', 'bug');
Returns an array of closed issues matching the "bug" term, as described in http://develop.github.com/p/issues.html#search_issues
$issue = $github->getIssueApi()->show('ornicar', 'php-github-api', 1);
Returns an array of information about the issue as described in http://develop.github.com/p/issues.html#view_an_issue
$github->getIssueApi()->open('ornicar', 'php-github-api', 'The issue title', 'The issue body');
Creates a new issue in the repo "php-github-api" of the user "ornicar". The issue is assigned to the authenticated user. Requires authentication. Returns an array of information about the issue as described in http://develop.github.com/p/issues.html#view_an_issue
$github->getIssueApi()->close('ornicar', 'php-github-api', 4);
Closes the fourth issue of the repo "php-github-api" of the user "ornicar". Requires authentication. Returns an array of information about the issue as described in http://develop.github.com/p/issues.html#view_an_issue
$github->getIssueApi()->reOpen('ornicar', 'php-github-api', 4);
Reopens the fourth issue of the repo "php-github-api" of the user "ornicar". Requires authentication. Returns an array of information about the issue as described in http://develop.github.com/p/issues.html#view_an_issue
$github->getIssueApi()->update('ornicar', 'php-github-api', 4, array('body' => 'The new issue body'));
Updates the fourth issue of the repo "php-github-api" of the user "ornicar". Requires authentication. Available attributes are title and body. Returns an array of information about the issue as described in http://develop.github.com/p/issues.html#view_an_issue
$comments = $github->getIssueApi()->getComments('ornicar', 'php-github-api', 4);
List an issue comments by username, repo and issue number. Returns an array of issues as described in http://develop.github.com/p/issues.html#list_an_issues_comments
$github->getIssueApi()->addComment('ornicar', 'php-github-api', 4, 'My new comment');
Add a comment to the issue by username, repo and issue number. The comment is assigned to the authenticated user. Requires authentication.
$labels = $github->getIssueApi()->getLabels('ornicar', 'php-github-api');
List all project labels by username and repo. Returns an array of project labels as described in http://develop.github.com/p/issues.html#listing_labels
$github->getIssueApi()->addLabel('ornicar', 'php-github-api', 'label name', 4);
Add a label to the issue by username, repo, label name and issue number. Requires authentication. If the label is not yet in the system, it will be created. Returns an array of the issue labels as described in http://develop.github.com/p/issues.html#add_and_remove_labels
$github->getIssueApi()->removeLabel('ornicar', 'php-github-api', 'label name', 4);
Remove a label from the issue by username, repo, label name and issue number. Requires authentication. Returns an array of the issue labels as described in http://develop.github.com/p/issues.html#add_and_remove_labels
Getting information on specific commits, the diffs they introduce, the files they've changed. Wrap GitHub Commit API.
$commits = $github->getCommitApi()->getBranchCommits('ornicar', 'php-github-api', 'master');
Returns an array of commits as described in http://develop.github.com/p/commits.html#listing_commits_on_a_branch
$commits = $github->getCommitApi()->getFileCommits('ornicar', 'php-github-api', 'master', 'README');
Returns an array of commits as described in http://develop.github.com/p/commits.html#listing_commits_for_a_file
$commit = $github->getCommitApi()->getCommit('ornicar', 'php-github-api', '726eac09a3b44411bd86');
Returns a single commit as described in http://develop.github.com/p/commits.html#showing_a_specific_commit
Getting full versions of specific files and trees in your Git repositories. Wrap GitHub objects API.
$tree = $github->getObjectApi()->showTree('ornicar', 'php-github-api', '691c2ec7fd0b948042047b515886fec40fe76e2b');
Returns an array containing a tree of the repository as described in http://develop.github.com/p/object.html#trees
$blobs = $github->getObjectApi()->listBlobs('ornicar', 'php-github-api', '691c2ec7fd0b948042047b515886fec40fe76e2b');
Returns an array containing the tree blobs as described in http://develop.github.com/p/object.html#blobs
$blob = $github->getObjectApi()->showBlob('ornicar', 'php-github-api', '691c2ec7fd0b948042047b515886fec40fe76e2b', 'CHANGELOG');
Returns array of blob informations as described in http://develop.github.com/p/object.html#blobs
$rawText = $github->getObjectApi()->getRawData('ornicar', 'php-github-api', 'bd25d1e4ea7eab84b856131e470edbc21b6cd66b');
The last parameter can be either a blob SHA1, a tree SHA1 or a commit SHA1. Returns the raw text content of the object as described in http://develop.github.com/p/object.html#raw_git_data
Searching repositories, getting repository information and managing repository information for authenticated users. Wrap GitHub Repo API.
$repos = $github->getRepoApi()->search('symfony');
Returns a list of repositories as described in http://develop.github.com/p/repo.html#searching_repositories
$repo = $github->getRepoApi()->show('ornicar', 'php-github-api')
Returns an array of information about the specified repository as described in http://develop.github.com/p/repo.html#show_repo_info
$repos = $github->getRepoApi()->getUserRepos('ornicar');
Returns a list of repositories as described in http://develop.github.com/p/repo.html#list_all_repositories
$tags = $github->getRepoApi()->getRepoTags('ornicar', 'php-github-api');
Returns a list of tags as described in http://develop.github.com/p/repo.html#repository_refs
$tags = $github->getRepoApi()->getRepoBranches('ornicar', 'php-github-api');
Returns a list of branches as described in http://develop.github.com/p/repo.html#repository_refs
$repo = $github->getRepoApi()->create('my-new-repo', 'This is the description of a repo', 'http://my-repo-homepage.org', true);
Creates and returns a public repository named my-new-repo as described in http://develop.github.com/p/repo.html
$token = $github->getRepoApi()->delete('my-new-repo'); // Get the deletion token
$github->getRepoApi()->delete('my-new-repo', $token); // Confirm repository deletion
Deletes the my-new-repo repository as described in http://develop.github.com/p/repo.html
The method you need does not exist yet? You can access any GitHub route by using the "get" and "post" methods. For example,
$repo = $github->get('repos/show/ornicar/php-github-api');
Returns an array describing the php-github-api repository.
See all GitHub API routes: http://develop.github.com/
The library is highly configurable and extensible thanks to dependency injection.
Wanna change, let's say, the request User Agent?
$github->getRequest()->setOption('user_agent', 'My new User Agent');
See all request available options in request/phpGitHubApiRequest.php
If you want to use your own request implementation, inject it to the GitHubApi:
// create a custom request
class myGitHubRequest extends phpGitHubApiRequest
{
// override things
}
// inject your request instance to the API.
$github->setRequest(new myGitHubRequest());
Your request implementation must extend phpGitHubApiRequest.
If you want to use your own implementation of an API, inject it to the GitHubApi. For example, to replace the user API:
// create a custom User API
class myGitHubApiUser extends phpGitHubApiUser
{
// override things
}
$github->setApi('user', new myGitHubApiUser());
All code is fully unit tested. To run tests on your server, from a CLI, run
php /path/to/php-github-api/prove.php
You should see
test/apiTest.........................................................ok
test/authenticationTest..............................................ok
test/commitTest......................................................ok
test/issueTest.......................................................ok
test/objectTest......................................................ok
test/repoTest........................................................ok
test/userTest........................................................ok
All tests successful.
Files=7, Tests=68
You can run only one test ; usefull when working on a feature.
php php test/commitTest.php
This library borrows ideas, code and tests from phptwitterbot.
Thanks to noloh for his contribution on the Object API. Thanks to bshaffer for his contribution on the Repo API.
Thanks to GitHub for the high quality API and documentation.