選択範囲テキストをTrelloにカード作成したかった2（しかも成功したnotificationが欲しい）

# 前回
とりあえずTrelloにカードを投稿するコマンドを作るまで作れるようになりました。
https://qiita.com/a_a_s/items/6e3c28d7245c7f9ce427

前回の最終結果として以下のコマンドが得られたわけで

```
curl -X POST "https://trello.com/1/cards?key=<APIKey>&token=<Token>&idList=<先ほど取得したListのID（上の"ccccccc"に当たる）>" -d "name=テストのカードだよ"| jq
```

ただこれだとカードが登録されても、反応が全くないのでわからないのが不便だなぁと思いまして、今回はこいつをnode.jsで書き直して、responseを受け取りたい。
ちなみにnode.jsを用いたのはなんとなくです。


# やりたいこと
1 node.jsを使いたい
2 引数を使ってみたい
3 request投げたい
4 notification出したい
5 ショートカット作成

# node.js を使えるようになる

## 必要なものinstall

https://qiita.com/kyosuke5_20/items/c5f68fc9d89b84c0df09
こちら参照しました。
すでにこういった手順は他の方がまとめてくださっているおかげで、何かに手を出す際にはとても敷居が低くなったように感じます。感謝。
（source .bash_profile 忘れずにやりましょう。 ）

## project作成
https://qiita.com/maitake9116/items/7825d90c09f3e2f87dea
上記を参照してnpmプロジェクト（？）を作成します。
今回は2~4の欲望により下記の3種をinstall

- commander
- request
- node-notifier

versionは今回はあまり考えずにとってきました。十中八九基本の機能しか使わないので。
install方法などについては今度調査を進めようかと考えています。npmなんぞもそうですし、
saveオプションとか、あまりよくわかっていないので。
まだまだdocumentを読む日々が続きそうです。。。

# 引数を使いたい
さて、先ほどinstallしたcommanderについて。
今回はさして必要ではないのだけれど、気になってみたから入れてみただけです。
ちょろちょろみてみたけれど、version, option, usage, 引数のマスト可否までやってくれるやつらしい。

今回はcard登録だけなので、-c, --card というオプションをつけました。引数はマストで。

```
// set command
var program = require("commander");
program
  .version('0.0.1', '-v, --version')
  .usage('[option] <cardName>')
  .option('-c, --card <cardName>', 'Add Card Name')
  .parse(process.argv);
```

今回はaddCard.jsというファイルで作成したいのですが

```
node addCard.js -c hoge
```

とやると

```
program.card
```

で"hoge"が取れる寸法です。


# request投げたい
こちらも先ほどinstallしたrequestを用いると、最低限の情報は投げられるようになりました。
ちなみにAPI_KEYとTOKENは定数でファイルの上の方に定義しました。
```
// set request
const request = require('request');
const URL = "https://trello.com/1/cards?key=" + API_KEY + "&token=" + TOKEN + "&idList=" + LIST_ID;
var options = {
  uri: URL,
  form: {
    name: CARD_NAME
  },
  json: true
};

request.post(options, function(error, response, body) {
  if (!error && response.statusCode == 200) {
    // Success notify したい
  } else {
    // Error notify したい
  }
});
```

# notifyしたい
全く記事にして意味があるのかと言われそうですが、先ほどのnode-notifierを用いるとサクッとできます。
上記のrequest.postの条件分岐を次のようにしました。

```
request.post(options, function(error, response, body) {
  if (!error && response.statusCode == 200) {
    notifier.notify({
      title: SUCCESS_TITLE,
      message: REGISTER_MSG + CARD_NAME,
      wait: true
    });
  } else {
      notifier.notify({
        title: ERROR_TITLE,
        message: REGISTER_MSG + CARD_NAME,
        wait: true
    });
  }
});
```

ちなみに私はmacos10.14.3でしたので、 node-notifier はそのまま Growl を install することなく用いることができました。
ここでの SUCCESS_TITLE, ERROR_TITLE はいずれもファイルの上の方で定義しました。
先ほどのcommanderを用いてこの辺りの変数も適宜変えられるようにできたらなぁとは思っているのですが、今回ので正直欲しい機能はついてしまっているのでやらない気がします。。。

# ショートカットで登録できるように。
さて、最後にショートカットできるようにしましょう。ここまできましたし。
下記を参照してAutomatorにまずは登録しましょう。
http://mzgkworks.hateblo.jp/entry/shell-automator
また今回は入力の引き渡し方法は「引数として」としました。

また何故かnodeのpathを読めていないようで、Automatorからnodeコマンドを使えない（command not found）でしたので下記のようにシェルを入力しました

```
source .bash_profile
cd /path/to/trello/project/
node addCard.js -c "$*"
```

あとは
https://qiita.com/kazuooooo/items/eefd88a2a852a5daf08d
のように先ほど作ったスクリプトをショートカットに登録してあげれば終わりです。

最後の方力つきでだいぶ雑になってしまいましたが、堪忍してください。