Kindleのフォーマット(mobi)への変換
調べたところ、Calibreというその筋では有名なソフトウェアが存在するようなので、試してみた。
何度か試したのだが、どうやら最近の日経新聞電子版ではエラーが発生するようで、Kindle化するまでに至らなかった。
幸い、Calibreは開発をオープンソースベースで行っているようでgithubにソースが管理されていた。その為、必要な修正をpushし、本家に取り込んでもらうことができた。
Ver 3.15以上であれば日経新聞を無事読み込むことができるので、エラーに悩まされていた人はぜひとも試してほしい
Amazon Web Serviceで自動配信
Calibre本体にタイマー機能がついているので、PCを起動しっぱなしにしておけば、毎日設定した時間に日経新聞を取得し、Kindleまで配信することが可能であるが、現在私はラップトップPCしか使っていないため、毎朝手動で朝刊を取得し、Kindleまでメールで送信する必要があった。毎日のこととなるとこの単純作業も地味に辛い。
はじめはフリー枠を恒久的に用意しているHerokuなどを使いたかったのだが、Calibreの場合は本体をインストールするという作業が必要になるため、Herokuでは技術的にこれを実現できなかった。
AWSならば基本的にはLinuxをそのまま利用できるのでこちらを利用することとした。
まずは一年間のトライアル枠で利用するので料金はかからない。厳密に料金の見積もりを取ってないが、Amazon CouldWatchというこれまたAmazonのサービスを使って朝刊と夕刊の時間を取得する時間だけインスタンスを立ち上げることができたので、トライアル期間を過ぎてもおそらくそれほど多大な料金はかからないだろう。
分かる人にしかわからないレベルの粒度で、AWSの自動配信のためにやったことを書いておく。
1. EC2インスタンスを用意する。Amazon Linux AMIを利用した
2. Amazon Lambdaを利用して、EC2インスタンスを起動するFunction、停止するFunctionを用意する
起動のためのFunction(python2.7)
import boto3 # Enter the region your instances are in. Include only the region without specifying Availability Zone; e.g.; 'us-east-1' region = 'XX-XXXXX-X' # Enter your instances here: ex. ['X-XXXXXXXX', 'X-XXXXXXXX'] instances = ['X-XXXXXXXX'] def lambda_handler(event, context): ec2 = boto3.client('ec2', region_name=region) ec2.start_instances(InstanceIds=instances) print 'started your instances: ' + str(instances)
停止のためのFunction
import boto3 # Enter the region your instances are in. Include only the region without specifying Availability Zone; e.g., 'us-east-1' region = 'XX-XXXXX-X' # Enter your instances here: ex. ['X-XXXXXXXX', 'X-XXXXXXXX'] instances = ['X-XXXXXXXX'] def lambda_handler(event, context): ec2 = boto3.client('ec2', region_name=region) ec2.stop_instances(InstanceIds=instances) print 'stopped your instances: ' + str(instances)
3. Amazon CloudWatchを利用して、2で作成したそれぞれのFunctionを実行するEventを作成する。
例えば朝刊は午前のJSTのAM2:30に配信されるので、起動をAM2:30、停止をAM3:20にした。
4. 1で用意したEC2にCalibreをインストールする
%>yum update
%>sudo yum install libGL
%>sudo -v && wget -nv -O- https://download.calibre-ebook.com/linux-installer.py | sudo python -c "import sys; main=lambda:sys.stderr.write('Download failed\n'); exec(sys.stdin.read()); main()"
私の場合はcalibreのインストール前に、libGLを手動でインストールする必要があった。
5. 日経新聞をmobi化するためのコマンド、およびそれを自分のKindleに配信するためのコマンドをスクリプト化する。
%>/opt/calibre/ebook-convert '日本経済新聞(朝刊・夕刊).recipe' /tmp/nikkei.mobi --username=<日経のIDとなるメールアドレス> --password=<そのパスワード> %>/opt/calibre/calibre-smtp -r mail.gmx.com --username <送信用のメールアドレス> --password <パスワード> --port 587 -a /tmp/nikkei.mobi <送信用のメールアドレス> <Kindleのドキュメント受付用のメールアドレス> subject
6. 5のスクリプトをcronで実行するよう設定する
35 17 * * * /home/ec2-user/calibre.sh
リファレンス