2014年6月27日金曜日

GithubのAPIをPHPから実行してみた

■環境
CentOS release 5.10 (Final)
PHP 5.3.3
composer 3251f9f1aa997479fff78905841e22beacfbe37b
php-github-api
guzzle 3.9.1
GitHub API v3

■インストール
・phpインストール
yum -y install php php-devel php-pear
php -m | grep curl
   でcurlモジュールがインストールされていることを確認します

・composerインストール
composerのインストール

emacs composer.json
{
    "require": {
        "knplabs/github-api": "*"
    },
    "minimum-stability": "dev"
}

composer install
Loading composer repositories with package information
Installing dependencies (including require-dev)
  - Installing symfony/event-dispatcher (dev-master 7a4f4b4)
    Cloning 7a4f4b42886f8c2e35acb1071f157a0b8eb1bd39

  - Installing guzzle/guzzle (v3.9.1)
    Downloading: 100%

  - Installing knplabs/github-api (dev-master a462c35)
    Cloning a462c357aa0503bd7fc94da889517de98c2c4ec0

symfony/event-dispatcher suggests installing symfony/dependency-injection ()
symfony/event-dispatcher suggests installing symfony/http-kernel ()
knplabs/github-api suggests installing knplabs/gaufrette (Needed for optional Gaufrette cache)
Writing lock file
Generating autoload files

ls -ltr vendor
合計 20
drwxr-xr-x 3 root root 4096  6月 27 09:34 symfony
drwxr-xr-x 3 root root 4096  6月 27 09:34 guzzle
drwxr-xr-x 3 root root 4096  6月 27 09:34 knplabs
drwxr-xr-x 2 root root 4096  6月 27 09:34 composer
-rw-r--r-- 1 root root  183  6月 27 09:34 autoload.php

■サンプルソースコード(指定したユーザのリポジトリ情報取得)
指定したユーザのリポジトリ情報一覧を取得します

emacs TestGithub.php
api('user')->repositories('kakakikikeke');
for ($i = 0; $i < count($repositories); $i++) {
  $repos = $repositories[$i];
  foreach ($repos as $key => $value) {
    if ($key === "name") {
      echo $key . " => " . $value . "\n";
    }
  }
}
?>

api('user') は固定です
コールするAPIの種類を指定します(他にも「issue」「pr」など指定できます)

repositories('kakakikikeke') にリポジトリを取得するユーザ名を指定します

サンプルではリポジトリの名前(name)だけを表示しています
連想配列として格納されているのでkeyを直接指定して取得してもOKです

■サンプルソースコード(README.mdの取得)
指定したユーザのリポジトリからREADMEの情報を取得します

api('repo')->readme('kakakikikeke', 'java-signature');
echo base64_decode($readme['content']);
?>

readmeメソッドの引数にユーザ名とリポジトリ名を指定します

contentはbase64エンコードされて取得されるのでクライアント上でデコードしてあげます

以上です
ソースコードも非常に読みやすく
endor/knplabs/github-api/lib/Github/Client.php
で呼び出すAPIを振り分けており、呼び出すAPIごとに
endor/knplabs/github-api/lib/Github/Api
配下に専用のclassとメソッドが定義されています
ドキュメントも用意されていますがソースが読みやすいので直接ソースを見てもいいかと思います
今回は紹介したPHPライブラリの他にもいろいろなサードパーティ製のライブラリがあるようなので興味のある方は他のライブラリも試してみるといいかもしれません

■参考サイト

0 件のコメント:

コメントを投稿