以前の作ったshellコマンドをJSON-RPC経由で実行する
を利用してHackMD
を外部からAPIで操作できるようにしたいと思います。
HackMDにはCLI
が提供されていますので、以前つくったJSON-RPCのDockerイメージにこのCLIをインストールして利用してみたいと思います。
HackMD CLIのインストール
以下のように簡単につくりました。
Dockerfile
1
2
3
4
| FROM tumf/shell-jsonrpc:latest
RUN apk add --update npm
RUN npm install -g @hackmd/hackmd-cli
|
Githubのtumf/hackmd-cli-api
にもおいてあります。
hackmd-cli-apiのビルドとテスト
ビルド
1
| $ docker build . -t hackmd-cli-api
|
実行
1
| $ docker run -p 127.0.0.1:8080:8999 hackmd-cli-api
|
テスト
$ curl -X POST --data-raw '{ "jsonrpc": "2.0", "id": "1", "method": "shell", "params": [ { "command": "hackmd-cli --version" } ]}' http://127.0.0.1:8080
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| {
"jsonrpc": "2.0",
"result": [
{
"command": "hackmd-cli --version",
"stdout.json": null,
"stdout": "@hackmd/hackmd-cli/1.1.1 linux-x64 node-v12.20.1\n",
"stderr": "",
"status": {
"exitstatus": 0,
"pid": 25
}
}
],
"id": "1"
}
|
よさそうですね👍
ログイン
HackMD CLIは環境変数でログイン用のID/PASSWORDを受け付けます。
- HMD_CLI_ID
- HMD_CLI_PASSWORD
これらの値を設定してdockerコマンドに引き渡すことでコンテナに環境変数が設定されます。
1
2
3
| $ export HMD_CLI_ID=[email protected]
$ export HMD_CLI_PASSWORD=p@ssw0rd
$ docker run -e HMD_CLI_ID -e HMD_CLI_PASSWORD -p 127.0.0.1:8080:8999 hackmd-cli-api
|
試してみます
1
| $ curl -X POST --data-raw '{"jsonrpc":"2.0", "id": "1", "method":"shell", "params": [{ "command": "hackmd-cli login" }] }'
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| {
"jsonrpc": "2.0",
"result": [
{
"command": "hackmd-cli login",
"stdout.json": null,
"stdout": "Login successfully ",
"stderr": "",
"status": {
"exitstatus": 0,
"pid": 856
}
}
],
"id": "1"
}
|
ログインできたようですね。
記事一覧
次にhackmd-cli historyで記事一覧見てみましょう。
1
| $ curl -X POST --data-raw '{"jsonrpc":"2.0", "id": "1", "method":"shell", "params": [{ "command": "hackmd-cli login" }, {"command": "hackmd-cli history"}] }'
|
都合により結果は書きませんが問題なく実行できました。