8
8

More than 5 years have passed since last update.

PHPStorm使って30分で実装。Bitbucket->ChatWork通知をFuelPHPで。

Posted at

とりあえず動くよってのを、ちゃちゃっと作ってみた。

準備

  • 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にこんなメソッドを実装。
例外処理もなんもないけどその辺は後でリファクタリングするので

fuel/app/classes/controller/api/chat.php
    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のプラグインでも出来るみたいだけど、
まあやりたい事それだけじゃないので。
今度またリファクタリングしながら考えようっと。

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8