技術ブログや公式ドキュメントを、Kindle や Kobo の電子ペーパーで読みたい。それだけの理由で、Web ページを EPUB にする API を公開しています。サービスは E-Ink、仕様は 開発者ドキュメント に置いてあります。
この記事はプロダクト紹介というより、パイプラインの形と、実際に叩く curl の話です。作っているのは自分です(Selenium39)。
きっかけ
pandoc -f html -t epub3 URL -o out.epub は、一見完成品に見えます。Pandoc は組版が上手い。ただし渡した HTML を忠実に EPUB にするだけなので、ヘッダー、Cookie バナー、関連記事、「続きを読む」まで本文になります。
静的な記事なら Readability 系でまだ戦えます。いま手元に置きたいページの大半は、JS で描画されるドキュメントサイトです。素の GET では殻しか返りません。Calibre は強いですが、ターミナルから URL を一本投げたい場面には重い。
なので、自分用にこの順番で固めることにしました。
- レンダリング済み DOM を取る(公開ページのみ)
- 記事本文だけ残す
- 見出し階層を目次と spine に落とす
- 中間 Markdown を Pandoc で EPUB3 にする
中間を Markdown にしたのは、抽出が怪しいときに EPUB を開く前に気づけるからです。UI でも同じプレビューを出しています。抽出が死んでいれば、あとの工程は全部無駄です。
本文抽出で毎週踏む穴
実装してから、同じ失敗を何度も見ています。
- 取りこぼし: タブ UI の中に本文がある。最初のタブだけ取れて、あとは空。
- 取りすぎ: サイドバーの TOC が「第1章」になる。
-
画像が灰色:
srcがプレースホルダで、本番 URL はdata-src/srcset側。
見出しもそのままだと目次が使えません。全部 <h3> の CMS もあれば、<h1> が一つしかない 8000 語のエッセイもあります。受け取った文書に対してレベルを上げ下げして、リーダーの目次が「章の一覧」になるようにしています。ここが地味で、いちばん効きます。
EPUB 側の CSS はほぼ捨てています。電子ペーパーは position: fixed も webfont も喧嘩しやすいです。コードブロックは 6 インチ Kindle で横にはみ出すので、折り返しはテーマではなく本文の問題として扱っています。
公開 API を叩く
認証は Bearer。キーはダッシュボードで発行します。プレフィックスは eink_ です。
Web ページ → EPUB(1 URL あたり 3 クレジット):
curl -X POST https://e-ink.me/api/v1/convert/webpage \
-H "Authorization: Bearer eink_your_api_key" \
-H "Content-Type: application/json" \
-d '{"url": "https://e-ink.me", "format": "epub"}' \
-o article.epub
format は epub のほか pdf / markdown も渡せます。複数 URL を一度に投げて、章が分かれた EPUB にする使い方もできます。残高確認:
curl https://e-ink.me/api/v1/credits \
-H "Authorization: Bearer eink_your_api_key"
よく見るステータスはこれです。
| HTTP | 意味 |
|---|---|
| 400 | パラメータ不正 |
| 401 | キーなし / 不正 |
| 402 | クレジット不足 |
| 413 | ファイルサイズ上限 |
| 500 | サーバ側の失敗 |
既にファイルがあるなら、変換エンドポイントに multipart で投げます。古い Kindle 向けに EPUB を MOBI にする例:
curl -X POST https://e-ink.me/api/v1/convert \
-H "Authorization: Bearer eink_your_api_key" \
-F "file=@article.epub" \
-F "converter=epub-to-mobi" \
-o article.mobi
同じキーで EPUB の翻訳(対訳モードあり)、TTS、マインドマップも叩けます。クレジットの目安はドキュメントの表が正です。Web→電子書籍が URL あたり 3、通常のフォーマット変換が 2、PDF OCR と TTS が 5、という感じです。
OpenAPI 3.1、llms.txt、MCP マニフェストもドキュメント側に置いてあります。登録時に無料クレジットが付くので、まず一本自分の記事 URL で試すのが早いです。
やらないこと
ログイン必須のページは対象外です。Cookie を預からないので、会員記事は取れません。Paywall を破る道具でもありません。公開 URL で、記事として成立しているものだけを想定しています。
変換のために上げたファイルは、処理が終わったら消します。ブラウザ上のリーダーはそもそもアップロードしません。本文を学習データに回したりはしません。
2022 年以降の Kindle と、Kobo、Apple Books は EPUB のままで足りることが多いです。古い Kindle だけ MOBI を噸ませています。
壊れた抽出を踏んだら、メールください。openminimax@gmail.com まで。Selenium39 です。