0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

curl 一本で Web 記事を EPUB にする公開 API を作った

0
Posted at

技術ブログや公式ドキュメントを、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 を一本投げたい場面には重い。

なので、自分用にこの順番で固めることにしました。

  1. レンダリング済み DOM を取る(公開ページのみ)
  2. 記事本文だけ残す
  3. 見出し階層を目次と spine に落とす
  4. 中間 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

formatepub のほか 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 です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?