とりあえず動くよってのを、ちゃちゃっと作ってみた。
準備
- oilのインストール
$ curl get.fuelphp.com/oil | sh
- ChatWorkとBitbucketのAPIキー取得
- チャットワークでグループチャットの作成
FuelPHPのプロジェクト作成
とりあえずプロジェクト名はnoticeとする。
$ oil create notice
$ cd notice
$ oil install
PHPStormで必要なものをcomposer経由で導入
PHPStormで、↑を開くなりNew Project From Existing Filesして、
プロジェクトを作成。
Composerの導入
Tools > Composer > Init Composer
インタプリタと、composer.pharを選択。
インタプリタはMAMP環境なら、
/Applications/MAMP/bin/php/php5.6.2/bin/php
とかその辺。
既にPreferences>Languages & Frameworks>PHPで登録していればプルダウンで選べるはず。
composer.pharはoil createでプロジェクトルートに出来ているのでそれを選択。
先走ってgetcomposer.orgから取って来ないように。
パッケージの導入
Tools > Composer > Add Dependency
パッケージが表示されるのをまって、
mp-php/fuel-packages-chatwork
gentle/bitbucket-api
をInstall
fuel/packages/chatwork
fuel/vendor/gentle/bitbucket-api
に配置される。
これでcomposer.jsonも更新される。
PHPStorm便利だなぁ・・・
コンフィグの修正
chatworkパッケージをalways_loadしておく。
ついでにdefault_timezoneと、languageまわりも。
bitbucketの方はcomposerのautoloaderが面倒みてくれる。
APIを雑に実装
とりあえず動的に変わりそうなパラメータもベタ書きで、
RestControllerにこんなメソッドを実装。
例外処理もなんもないけどその辺は後でリファクタリングするので
public function action_notice()
{
$oauth_params = array(
'oauth_consumer_key' => '鍵',
'oauth_consumer_secret' => 'Secret'
);
$account = 'アカウント名';
$repository = 'リポジトリ名';
$rid = 'ルームID';
$events = new Bitbucket\API\Repositories\Events();
$events->getClient()->addListener(
new Bitbucket\API\Http\Listener\OAuthListener($oauth_params)
);
$content = $events->all($account, $repository, array('start' => 0, 'limit' => 1,))->getContent();
$response = json_decode($content);
foreach($response->events as $event)
{
$subject = $event->event;
$utc_created_on = strtotime($event->utc_created_on);
$updated_at = date('Y-m-d H:i:s', $utc_created_on);
$title = $subject . ' by ' . $event->user->display_name . ' on ' . $updated_at . "\n";
$body = '';
foreach($event->description->commits as $commit)
{
$body .= $commit->description . "\n";
$body .= "https://bitbucket.org/{$account}/{$repository}/commits/{$commit->hash}\n";
}
Chatwork::post("/rooms/{$rid}/messages", array('body' => "[info][title]{$title}[/title]{$body}[/info]"));
}
}
とりあえず、これで試しにアクセスしてみて、チャットワークに投稿できればOK。
あとはWebサーバーの設定とデプロイして、
BitbucketのPOST用フックにURLを指定すれば、pushがチャットワークに通知される。
やっぱtaskにしちゃって、jenkinsから呼び出す方がいいかな。
push通知だけならjenkinsのプラグインでも出来るみたいだけど、
まあやりたい事それだけじゃないので。
今度またリファクタリングしながら考えようっと。