Create a new Dropbox Paper document from Alfred workflow

Create a new Dropbox Paper document from Alfred workflow

Alfred ワークフローから Dropbox Paper ドキュメントを作成できるようにしてみました。

この記事は以下のシリーズの続きになります (台風で…!暇…!)。

今までは Alfred から dbp new すると Dropbox Paper のトップページに飛ぶ挙動でしたが、タイトルを入力するとそのタイトルのドキュメントの編集画面に飛ぶ方ようにしたかったので改善してみました。

これからは dbp new <タイトル> を実行すると直ぐに編集画面に飛べます。

方法

これも基本は curl コマンドで Dropbox API を叩いて実現しています。が、新規ドキュメントを作成する /docs/create API は以下のようにファイルとしてデータを渡してあげる必要があり (新規作成というよりインポートですね)、一度ファイルを /tmp に作成してからそれを API に渡すという少し回り道な方法を取っています。

curl -X POST https://api.dropboxapi.com/2/paper/docs/create
--header "Authorization: Bearer <get access token>"
--header "Dropbox-API-Arg: {"import_format": "markdown"}"
--header "Content-Type: application/octet-stream"
--data-binary @local_file.txt

/docs/create

ワークフローで実行しているコマンド全体は以下。

export DROPBOX_ACCESS_TOKEN=$(security find-generic-password -a $USER -s dropbox-access-token -w)

query="{query}"
date=$(date +%Y%m%d%H%M)

mkdir -p /tmp/alfred-dropboxpaper-workflow
echo "# $query" > /tmp/alfred-dropboxpaper-workflow/$date.md

doc_id=$(curl -s -X POST https://api.dropboxapi.com/2/paper/docs/create \
  --header "Authorization: Bearer $DROPBOX_ACCESS_TOKEN" \
  --header "Dropbox-API-Arg: {\"import_format\": \"markdown\"}" \
  --header "Content-Type: application/octet-stream" \
  --data-binary @/tmp/alfred-dropboxpaper-workflow/$date.md \
  | grep doc_id | cut -d'"' -f4)

echo -n $doc_id

{query} にワークフローから受け取った入力 (今回の場合ドキュメントのタイトル) が入るので、 # タイトル という内容のみの YYYYmmddHHMM.md ファイルを作成し、これを API に渡しています。API のレスポンスに作成したドキュメントの ID が含まれているので、これを次のフローに渡すために echo コマンドで吐かせています。

次のフローでは Open URL アクションを使用し、echo で渡された新規に作成したドキュメントの ID を元に生成したドキュメントの URL を開いています。

感想

結構使いやすくなってきたので引き続き活用していきたい。 😃