自社システムからTrelloにカードを作成する機能を実装

この記事では以下について実装方法を説明します。
・自社システム内で特定の操作をしたときにTrelloにカードを生成

機能を実装するために「Trello API」を使用します。
使うまでの手順を優しく説明します。
ちなみにここで使うものは全て以下の公式仕様書に記載されています。
https://developer.atlassian.com/cloud/trello/rest/api-group-actions/

まず先立って、先日投稿した記事の１～５の設定を完了してください。
https://qiita.com/localinnovation/items/8bbe268cab1a06572bdc

１．投稿したい対象ボードのIDを取得します。
コマンドプロンプトやターミナルで以下のコマンドを実行しましょう。

```
curl "https://trello.com/1/members/[ユーザ名]/boards?key=[上記記事の３で表示されたキー]&token=[上記記事の５で表示されたトークン]&fields=name"
```
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669454/fd68750e-7430-100f-ecee-56442137e550.png)
「Trelloへようこそ」「テスト」という2つのボードが表示されました。
ここでは例として「テスト」のボードにしましょう。
「テスト」のidをコピーしておきます。

２．ターゲットとなるボードは取得できましたがどのリストにカードを作成するかについて、ここからはPHPの処理で行ってきたいと思います。
（作成先リストが決まっている場合は飛ばしてください。）
curlでリスト取得API（Get Lists on a Board）を叩き、リストIDを取得します。

```PHP
        // ボードID
        $boardID = [１でコピーしたid];

        // API キー
        $trelloApiKey = [上記記事の３で表示されたキー];

        // APIトークン
        $trelloApiToken = [上記記事の５で表示されたトークン];

        // リストの取得
        $getUrl = '';
        $getUrl = "https://api.trello.com/1/boards/" . $boardID . '/' . 'lists?key=' . $trelloApiKey . '&token=' . $trelloApiToken . '&fields=name';

        // 実行
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $getUrl);
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $response = curl_exec($ch);
        curl_close($ch);

        // リスト情報を検証
        $decodeResponseArr = json_decode($response);
        foreach($decodeResponseArr as $key=>$value){
            // $value['name']にリストの名前、$value['id']にリストのIDが入っている
            $value = get_object_vars($value);
            if([何らかの条件]){
                // リストのIDを設定
                $listId = $value['id'];
                break;
            }
        }

```

３．次に追加するメンバーを取得します。
（メンバーが決まっている場合は飛ばしてください。）
curlでリスト取得API（Get the Members of a Board）を叩き、メンバーIDを取得します。

```PHP
        // ボードID
        $boardID = [１でコピーしたid];

        // API キー
        $trelloApiKey = [上記記事の３で表示されたキー];

        // APIトークン
        $trelloApiToken = [上記記事の５で表示されたトークン];

        // メンバーの取得
        $getUrl = '';
        $getUrl = "https://api.trello.com/1/boards/" . $boardID . '/' . 'members?key=' . $trelloApiKey . '&token=' . $trelloApiToken;

        // 実行
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $getUrl);
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $response = curl_exec($ch);
        curl_close($ch);

        // メンバー情報を検証
        $decodeResponseArr = json_decode($response);
        foreach($decodeResponseArr as $key=>$value){
            // $value['fullName']にメンバーの名前、$value['id']にメンバーのIDが入っている
            $value = get_object_vars($value);
            if([何らかの条件]){
                // メンバーのIDを設定（複数の場合はカンマ区切り）
                $members .= $value['id'] . ',';
            }
        }
        // 末尾のカンマを削除
        $members = rtrim($members, ",");
```

４．次に追加するラベルを取得します。
（ラベルが決まっている場合は飛ばしてください。）
curlでラベル取得API（Get Labels on a Board）を叩き、ラベルIDを取得します。

```PHP
        // ボードID
        $boardID = [１でコピーしたid];

        // API キー
        $trelloApiKey = [上記記事の３で表示されたキー];

        // APIトークン
        $trelloApiToken = [上記記事の５で表示されたトークン];

        // ラベルの取得
        $getUrl = '';
        $getUrl = "https://api.trello.com/1/boards/" . $boardID . '/' . 'labels?key=' . $trelloApiKey . '&token=' . $trelloApiToken;

        // 実行
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $getUrl);
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $response = curl_exec($ch);
        curl_close($ch);

        // ラベル情報を検証
        $decodeResponseArr = json_decode($response);
        foreach($decodeResponseArr as $key=>$value){
            // $value['name']にラベルの名前、$value['id']にラベルのIDが入っている
            $value = get_object_vars($value);
            if([何らかの条件]){
                // ラベルのIDを設定（複数の場合はカンマ区切り）
                $labels .= $value['id'] . ',';
            }
        }
        // 末尾のカンマを削除
        $labels = rtrim($labels, ",");
```

５．次にいよいよカードを投稿します。
curlでカード作成API（Create a new Card）を叩きます。

```PHP
        // ボードID
        $boardID = [１でコピーしたid];

        // API キー
        $trelloApiKey = [上記記事の３で表示されたキー];

        // APIトークン
        $trelloApiToken = [上記記事の５で表示されたトークン];

        // カードの投稿
        $postUrl = "https://trello.com/1/cards";

        // POSTするデータ
        $postData  = "key=" . $trelloApiKey;
        $postData .= "&token=" . $trelloApiToken;
        $postData .= "&idList=" . $listId; // ２で設定したリストID
        $postData .= "&name=" . urlencode([カードのタイトル]); 
        $postData .= "&desc=" . urlencode([カードの説明]);
        $postData .= "&due=" . urlencode([カードの期限]); // 2020-07-10 19:00:00 のフォーマット
        $postData .= "&idMembers=" . $members; // ３で設定したメンバーID
        $postData .= "&idLabels=" . $labels; // ４で設定したラベルID

        $postUrl = $postUrl . '?' . $postData;

        // 実行
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $postUrl);
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POST, true);
        $response = curl_exec($ch);
        $httpcode = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
        curl_close($ch);
```

これでパシッとカード投稿ができました。
僕は実装苦労しましたが上記コードを使えば超簡単です。

ぜひやってみてください！