2017/07/18

calibre の nikkei.recipe をデバッグ

GCE でインスタンスを作成したら、calibre のインストールと設定を行う。

calibre のインストールは、普通に apt-get install でインストールする。

インストールをしたら試しに日経新聞のレシピを指定して mobi ファイルを作成してみる。(以前の記事をご参考

/opt/calibre/ebook-convert input_file output_file [options]
例)
/opt/calibre/ebook-convert '日本経済新聞(朝刊・夕刊).recipe' /tmp/nikkei.mobi --username=USERNAME -password=PASSWORD

2017.06.20 時点では、たぶんエラーが出て mobi ファイルが作成できなかいはずだ。今ももしかしたら、apt-get でインストールできるバージョンではエラーが出るかもしれない。今回はこの問題をデバッグした話。



前々回に raspberry pi で設定した calibre でエラーが出るようになったと書いたが、GCE に作った VM 上の debian でも微妙に内容が違うがエラーがでて、mobi ファイルが作成されない。ネットで調べてみると、2016年9月頃から突然 mobi ファイルの作成ができなくなったというフォーラム記事がちらほら見つかるので、calibre の recipe ファイルが web サイトの UI の更新に対応できなくなったと思われる。calibre の開発者も見ているフォーラムにユーザーが recipe ファイルの更新を依頼しているが、日本語の Web サイトが見れる人が修正してくれないとわからないと返されている。そりゃそうだ。開発者はどうやらインドの人っぽい。

そこで、前回 calibre 自体を調べた時に、calibre もそうだがニュースサイトごとの設定ファイルというかデータ取得手順が記載されている recipe ファイルも github に公開されているので、デバッグしてみることにした。recipe ファイルは中身は python なので、特別新しく学ぶ必要はない。

apt-get install でインストールした calibre のレシピファイルは以下の zip ファイルの中にある。
/opt/calibre/resources/builtin_recipes.zip

こちらの中身を展開して nikkei.recipe を見ると、デバッグモード用のコードがコメントアウトされているので、そちらを有効にして mobi ファイルの作成を試してみると、どうやらログイン処理が正しく行われていない様子。

で、Chrome ブラウザのデベロッパーツールでのログイン処理を調べつつ、差分を比較すると問題箇所を特定。recipe ファイルを修正して zip ファイルに戻すと、きちんと mobi ファイルが作成されることが確認できた。と、これだけ書くとシンプルなんだが、ここにいたるまでに実は時間がかかってしまった。

ちなみに、calibre は ebook-conver 実行時に最新のレシピファイルを確認して、最新がサイト上にあればそちらを DL して利用する。そのため、ローカルで修正した recipe ファイルを利用する場合は「--dont-download-recipe」オプションを指定する必要がある。

何度かテストを実施し問題なさそうなので、github の calibre の recipe ファイルにも変更を pull request したら、無事に accept されたので、たぶん他の人たちも mobi ファイルの作成ができるようになっているはず。
(こんな記事書いたらまた違う対策されるかもしれないけど)

ということで、GCE の VM 上で calibre 使って mobi ファイルを作成する proof of concept は完了。次は、VM のメタデータを利用して起動スクリプトを指定する方法を確認する。


2 件のコメント:

  1. 2016年ごろまで取得できていた日経電子版の記事が長い間ダウンロードできませんでしたが、こちらの記事を見てCalibreを起動したところ、無事取得できました。レシピを修正いただきありがとうございます。
    1点希望ですが、今は目次で全ての記事が1つずつ表示されていますが、2016年以前のように面ごと(1面、総合、経済、、)にまとまって表示されるとありがたいです。

    返信削除
  2. 大変助かりました。ありがとうございます。お忙しいとは思いますが、chiyoshiさんと同じく、面ごとにまとめて表示されるようご対応頂ければ更にありがたいです。(自分でも少しーコードを見てはみます、、、)よろしくお願い致します。

    返信削除