Fragments of verbose memory

冗長な記憶の断片 - Web技術のメモをほぼ毎日更新(準備中)

Jan 27, 2021 - コメント - 日記

HackMD CLIをJSON-RPC経由で使う

以前の作った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のビルドとテスト

ビルド

$ docker build . -t hackmd-cli-api

実行

$ 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コマンドに引き渡すことでコンテナに環境変数が設定されます。

$ export HMD_CLI_ID=user@example.com
$ 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

試してみます

$ 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で記事一覧見てみましょう。

$ curl -X POST --data-raw '{"jsonrpc":"2.0", "id": "1", "method":"shell", "params": [{ "command": "hackmd-cli login" }, {"command": "hackmd-cli history"}] }'

都合により結果は書きませんが問題なく実行できました。