2012年7月2日月曜日

JSONをシェルスクリプトで処理するには?

Google DriveにCURLでファイルをアップロードすることはできた。
琴線探査: Google DriveにCURLでアップロードするには?

最後の問題は、Google Drive APIやOAuthで返ってきたJSONをどうやってシェルスクリプトで処理するかだ。

そこで、「jsawk」を使わせてもらうことにした。
micha/jsawk · GitHub


SpiderMonkeyのインストール

jsawkは例の有名なコマンドラインのJavaScript実行環境「SpiderMonkey」が必要なので、まずこれからインストールする。

幸いにも、DAGにパッケージがあった。DAGリポジトリを使えるようにするにはこちら。
琴線探査: さくらのVPSをMond Rescueで丸ごとバックアップしてVMWare Fusionでリストアしてみた

[root@xxx ~]# yum install js --enablerepo=dag
・・・
Dependencies Resolved

============================================
Package Arch Version Repository Size
============================================
Installing:
js x86_64 1:1.7.0-1.el5.rf dag 1.5 M

Transaction Summary
============================================
Install 1 Package(s)
Upgrade 0 Package(s)

Total download size: 1.5 M
Is this ok [y/N]: y
・・・
Installed:
js.x86_64 1:1.7.0-1.el5.rf

Complete!


jsawkのインストール

jsawkをありがたくダウンロードさせていただく。
Downloads · micha/jsawk · GitHub

適当な場所に解凍する。
[root@xxx bin]# unzip micha-jsawk-1.2-2-g8f4112b.zip

jsawkはシェルスクリプトだ。

jsawkを解凍したディレクトリの中からパスが通ったところに移動させ、いらないファイルを削除しとく。
[root@xxx micha-jsawk-8f4112b]# mv jsawk ..
[root@xxx micha-jsawk-8f4112b]# rm *
[root@xxx micha-jsawk-8f4112b]# cd ..
[root@xxx bin]# rmdir micha-jsawk-8f4112b/

パーミッションを設定する。
[root@xxx bin]# chmod 700 jsawk


OAuthで返ってきたJSONの中からjsawkでアクセストークンを抽出してみる

curl -X POST https://accounts.google.com/o/oauth2/token \
-d "code=CODE" \
-d "client_id=CLIENT_ID" \
-d "client_secret=CLIENT_SECRET" \
-d "redirect_uri=urn:ietf:wg:oauth:2.0:oob" \
-d "grant_type=authorization_code" \
| jsawk "return this.access_token"

のようにしてOAuthから返ってくるこのようなJSON

{
"access_token" : "ACCESS_TOKEN",
"token_type" : "Bearer",
"expires_in" : 3600,
"refresh_token" : "REFRESH_TOKEN"
}

がパイプでjsawkに渡され、ACCESS_TOKENの部分が抽出されて標準出力に表示される。

ということは、これをシェルの変数にしたり、ファイルにしたりもできるということ。


ゴールが見えた!