こんにちは、@sowawaです。まだまだアドベントカレンダーの世界の初心者ですがよろしくお願いします。今日までアドベントカレンダーの話はWebPayを簡単に使うためのCheckoutHelperが中心でした。もうWebPayを簡単にWebページに組み込む方法を皆さんには知ってもらえたでしょうか?今日は、ここまでのアドベントカレンダーとは全く違うは、黒い画面の話をしたいと思います。(コンソールが黒じゃない人はごめんなさい)
Cooking WebPay in Command line
すでにWebPayではcurlを使ったドキュメントを用意していますので、「コマンドラインからWebPayを使う」とかいわれても「そんなの常識だろ」とおっしゃる人も多いと思いますが、RestやJSONが全盛の現代でいかにCLI厨のおじさんたちがどうやって生き残っていくか、そんな生存戦略を語っていきたいと思います。
sed
awk
jq
コマンドラインで様々な操作をするエンジニアの皆さんにとって、sed
やawk
はとても身近なツールだと思います。あとはgrep
やuniq
、sort
なんていうコマンドもありますね。そこで今回紹介したいのは、コマンドラインツールjq
です。jq
を使うことでJSONを柔軟に取り扱うことが出来るようになるため、これらのコマンドと組み合わせることでAPIの出力を自由自在に操れるようになります。
コマンドラインを使ってデータを整形したり、変換したり、集計する作業の最初の一歩として、簡単なプログラムを作ったり、awk
を使ってCSVを作ったりすることはよくありますよね。様々な形をしたデータを自分がほしい形に整形して利用するために、jq
を活用して行きましょう。
課金の一覧を取得してjq
を使ってみる
簡単な例として課金の一覧を取得してcharge_id
の一覧表示する例を作ってみました。
$ curl "https://api.webpay.jp/v1/charges?count=3" \
-u "test_secret_eHn4TTgsGguBcW764a2KA8Yd": | jq '(.data[].id)'
"ch_aK68QI3xLbnW5Rv"
"ch_aK677mg0QedR0Og"
"ch_aK6fM75s37i3g57"
うまくcharge_id
の一覧を作ることが出来ましたね。WebPayのドキュメントで示されているレスポンス例を元に少し解説をしたいと思います。
{
"object": "list",
"url": "/v1/charges",
"count": 3,
"data": [
{
"id": "ch_7KhaO74sY0MPedM",
"object": "charge",
"livemode": false,
"currency": "jpy",
"description": "First charge",
"amount": 1000,
"amount_refunded": 0,
"customer": null,
"created": 1366576035,
"paid": true,
"refunded": false,
"failure_message": null,
"card": {
"object": "card",
"exp_year": 2020,
"exp_month": 4,
"fingerprint": "215b5b2fe460809b8bb90bae6eeac0e0e0987bd7",
"name": "KEISUKE SOGAWA",
"country": "JP",
"type": "Visa",
"cvc_check": "pass",
"last4": "4242"
},
"captured": true,
"expire_time": null
},
{...},
{...}
]
}
最初のポイントとしては、jqというのはxmlのxpathやCSS形式のようなイメージを持っていただくのがわかりやすいと思います。jqに渡している.data[].id
という引数の部分がまさにxpathのような感じですね。最初の.data[]
という部分は、JSONのルートからみた要素のdataを配列形式で取得します。続く.id
で配列の各要素のidを取得しています。.amount
に変更すると金額を取得することができます。
注:詳細な使い方はjqの公式を参照してください。
今日はjq
の導入部分を紹介したかったので詳しい機能の解説はしませんが、jq
にはまだまだたくさんの機能が用意されています。mapやselectのような関数も用意されていたり、四則演算も行うことができるのでぜひjq
の全機能に目を通してみてください。きっとあなたのコマンドラインライフを素晴らしい物に変えてくれるはずです。
それでは今日のアドベントカレンダーはここまでです。See you again. Have a nice weekend.