Kindleでハイライトつけた内容はKindle: メモとハイライトで閲覧できます。 このページの内容をMarkdownに変換してコピーするためのライブラリを書きました。

使い方

  1. コピーしたい本をKindle: メモとハイライトで開きます
  2. ブラウザの開発者ツールの"コンソール"を開きます
  3. 次のコードを実行するとクリップボードにコピーできます
const { parsePage, toMarkdown } = await import('https://cdn.skypack.dev/kindle-highlight-to-markdown');
const result = parsePage(window); // JSON Object
const markdown = toMarkdown(result); // Markdown
copy(markdown);

ブックマークレット版: kindle-highlight-to-markdown

ただのnpmに公開しているJavaScriptライブラリになっています。 DOMの中身を見てJSONにして、それをMarkdownに変換してるだけです。 仕様が変わると壊れると思うので、壊れてたらIssueかPRをください。

モバイル端末とかでKindle読んで、ハイライトを回収したいことがあったので書きました。 macOSとかのPCならスクリーンショットベースでメモを取ったりしてることが多いです。

メモ kindle:// protocol

macOSではkindle:// というprotocolが予約されていて、次のパラメータで書籍の任意の場所を開けます。

kindle://book?action=open&asin=${asinValue}&location=${locationNumber}

このkindle://みたいな未知のProtocolはGitHub Markdownだとリンクになりません。(javascript:とかのXSSを防ぐための処置だと思います)

そのため、次のようなCloudflare WorkerでProxyを書いて、https://xxx.workers.dev/book?action=open&asin=${asinValue}&location=${locationNumber}kindle:// にリダイレクトしています。 これで、GitHub Markdownなどkindle://がサニタイズされる場所からも、Kindleのページをリンクできます。

const statusCode = 301

async function handleRequest(request) {
  const url = new URL(request.url)
  const { pathname, search } = url;
  const destinationURL = "kindle://" + pathname + search;
  return Response.redirect(destinationURL, statusCode);
}

addEventListener("fetch", async event => {
  event.respondWith(handleRequest(event.request))
})