KindleのメモとハイライトをMarkdownにするJavaScriptライブラリを書いた
Kindleでハイライトつけた内容はKindle: メモとハイライトで閲覧できます。 このページの内容をMarkdownに変換してコピーするためのライブラリを書きました。
使い方
- コピーしたい本をKindle: メモとハイライトで開きます
- ブラウザの開発者ツールの”コンソール”を開きます
- Firefox: ウェブコンソール - 開発ツール | MDN
- Chrome: Console overview - Chrome Developers
- 次のコードを実行するとクリップボードにコピーできます
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))
})
お知らせ欄
JavaScript Primerの書籍版がAmazonで購入できます。
JavaScriptに関する最新情報は週一でJSer.infoを更新しています。
GitHub Sponsorsでの支援を募集しています。