2013年08月22日
Calibre を使って全文変換した RSS フィード を Kindle へ自動配信する方法
新聞よりも専門性・多様性が高い Web 上の良質な記事を自分の好みに組み合わせ Kindle へ自動配信して読むのが僕の楽しみの一つ。 これには Kindlefeeder というサービスを使っていたんですが、最近は記事の内容が省略されて配信されるようになってしまったんです。 どうも、負荷に耐えられなくなったようで今後の改善も期待出来ないみたい・・・。
もう、自作するのが確実かもしれませんね。 今日は Calibre を使って全文 RSS フィードを Kindle へ自動配信する方法をご紹介します。
Kindle Paperwhite へ RSS フィードを全文変換・自動配信する仕組み
仕組みはこう。 まず、気の利いた Web サイトであれば必ず用意されている RSS フィードを全文変換サービスと組み合わせて記事の全文を手に入れます。
これを自分の管理するサーバー上で Calibre を使って Kindle フォーマットの電子書籍に変換した後、Amazon の提供するメールを使った電子書籍配信( Send to Kindle )サービス経由で Kindle へ届けます。
僕はさくらの VPS を使って Calibre 変換・メール配信しますが、必ずしも VPS を使う必要は無く、自宅で常時稼働するサーバー PC を使ってもOK。
僕が今回利用する OS は CentOS 6 。以下の手順で Calibre をインストールします。
より詳しい方法、依存関係はこちらをどうぞ。
calibre - Download for linux
続いて、ドキュメントの送信に利用する Gmail アドレスも用意します。
作成したメールアドレスは Kindle パーソナルドキュメント設定を開き、
承認済みのメール・アドレスに追加しておきましょう。
これで準備はおしまい。
まずは RSS フィードを使った電子書籍の作り方とその配信方法を学びましょう。
この ebook-convert には recipie と呼ばれるリソース定義ファイルを変換対象として指定することも出来ます。
Calibre はコンテンツ(本文)の量に応じて、少なければ Web サイトから本文のダウンロードを試みますが、全文変換した RSS フィードであること( RSS フィードのみで電子コンテンツを作成すること)を明示的に宣言する use_embedded_content パラメーターがあります。
この2つをレシピに追加・有効化するとデザイン崩れ、電子ファイル作成速度を改善することが出来ます。
すると全文に変換された RSS フィードの URL と変換データが表示されたはずです。
この URL をコピーして先ほどの recipe ファイルに反映しましょう。
しばらく待つと手元の Kindle に自動配信されて・・・。
Kindle フォーマットで全文変換された Web ページが読めました!
レシピ・ファイルの詳しい説明、その他オプションはこちらをどうぞ。
もう基本的な仕組みは分かりましたよね。 後は自動配信するシェル・スクリプトを用意するだけ。
crontab を編集して自動配信したい時間に呼び出します。 次の例では毎朝 7:00 にシェル・スクリプトを呼び出し、自動配信しています。
自動配信サーバーへの Calibre インストールと mobi ファイル送信用メールアカウントの作成
僕が今回利用する OS は CentOS 6 。以下の手順で Calibre をインストールします。
まずは依存ライブラリを以下の手順でインストール(省略しますが Python も必要)
$ sudo yum install ImageMagick $ sudo yum install libXdmcp $ sudo python -c "import sys; py3 = sys.version_info[0] > 2; u = __import__('urllib.request' if py3 else 'urllib', fromlist=1); exec(u.urlopen('http://status.calibre-ebook.com/linux_installer').read()); main()"
コンソールで作業している場合、デスクトップ統合処理でエラーが出ることがありますが気にしないでOK。
____________________ WARNING ____________________
Setting up desktop integration failed with error:
__________________________________________________
Traceback (most recent call last):
File "site-packages/calibre/linux.py", line 712, in setup_desktop_integration
File "subprocess.py", line 542, in check_call
CalledProcessError: Command 'xdg-mime install ./calibre-mimetypes.xml'
returned non-zero exit status 3
より詳しい方法、依存関係はこちらをどうぞ。
calibre - Download for linux
続いて、ドキュメントの送信に利用する Gmail アドレスも用意します。
作成したメールアドレスは Kindle パーソナルドキュメント設定を開き、
承認済みのメール・アドレスに追加しておきましょう。
これで準備はおしまい。
RSS フィードの全文変換と Calibre を使った Kindle フォーマットの電子書籍作成・配信
まずは RSS フィードを使った電子書籍の作り方とその配信方法を学びましょう。
Calibre には幾つかの CLI コマンドが含まれていますが、書籍の作成には ebook-convert コマンドを利用します。
次の例では epub ファイルを Kindle 標準の mobi ファイルに変換しています。
$ ebook-convert from.epub to.mobi
この ebook-convert には recipie と呼ばれるリソース定義ファイルを変換対象として指定することも出来ます。
class MyDailyFeedRecipe(BasicNewsRecipe): title = u'RSS Feeds' oldest_article = 1 # oldest days max_articles_per_feed = 50 language = 'ja' timefmt = ' [%Y-%m-%d %H:%M]' feeds = [ (u'Favorites Feed1', u'http://feed1.com/rss') ,(u'Favorites Feed2', u'http://feed2.com/rss') ,(u'Favorites Feed3', u'http://feed3.com/rss') ]
このサンプル・レシピでは Favorites Feed1, Favorites Feed2, Favorites Feed3 という名前をつけた3つの RSS フィード URL を対象に、それぞれ過去1日( oldest_article )の間に作成され、最大でも1 RSS あたり 50 件( max_articles_per_feed )の記事を使って、RSS Feeds というタイトルの電子書籍を作成するという意味・定義が含まれています。
この他には Web ページのスタイルシートを利用しない事を明示的に宣言する no_stylesheets
no_stylesheets = True
Calibre はコンテンツ(本文)の量に応じて、少なければ Web サイトから本文のダウンロードを試みますが、全文変換した RSS フィードであること( RSS フィードのみで電子コンテンツを作成すること)を明示的に宣言する use_embedded_content パラメーターがあります。
use_embedded_content = True
この2つをレシピに追加・有効化するとデザイン崩れ、電子ファイル作成速度を改善することが出来ます。
さて、登録する RSS フィードの URL が必要ですね。 例えば BLOGOS (新着)の RSS フィードは次の URL になります。
http://blogos.com/feed/article_recent/
通常 RSS フィードは記事の更新と内容の一部を知る為に利用しますが、この RSS フィードを fullrss.net を使って全文 RSS に変換してみます。
まずは RSS フィードの URL を入力して convert ボタンをクリック。
すると全文に変換された RSS フィードの URL と変換データが表示されたはずです。
この URL をコピーして先ほどの recipe ファイルに反映しましょう。
class MyDailyFeedRecipe(BasicNewsRecipe):
title = u'RSS Feeds'
oldest_article = 1 # oldest days
max_articles_per_feed = 50
language = 'ja'
timefmt = ' [%Y-%m-%d %H:%M]'
no_stylesheets = True
use_embedded_content = True
feeds = [
(u'BLOGOS', u'http://fullrss.net/a/http/blogos.com/feed/article_recent/')
]
※日本語もOK。但し、ファイルの文字コードは UTF-8 にすること。
今回は一つだけ登録するのでこれでおしまい。
さあ、この recipe ファイルを使って Kindle Paperwhite 向け電子書籍を作ってみます。
$ ebook-convert /path/to/my.recipe /path/to/converted.mobi --output-profile=kindle_pw
※ --output-profile ではモデル名に kindle_pw を指定していますが、Calibre のバージョンが古い場合サポートしていない場合があります。その場合には kindle を指定しましょう。
少し時間は掛かりますが指定した場所に converted.mobi というファイルが作られたはず。
このファイルを calibre-smtp コマンドと用意した Gmail アドレスを使って Kindle のメール・アドレスへ送信します。
$ calibre-smtp -a /path/to/converted.mobi --relay smtp.gmail.com --port 587 \
-u gmail-userid -p gmail-password -e TLS your@gmail.com your@kindle.com ''
your@gmail.com: 貴方の Gmail アドレス
-u: gmailユーザID
-p: gmailパスワード
your@kindle.com: Kindle 端末の管理で確認出来る Kindle メール・アドレス
しばらく待つと手元の Kindle に自動配信されて・・・。
Kindle フォーマットで全文変換された Web ページが読めました!
Calibre による電子書籍の作成と Kindle へのドキュメント配信を自動化する
もう基本的な仕組みは分かりましたよね。 後は自動配信するシェル・スクリプトを用意するだけ。
例えばこう。
#!/bin/sh
SEND_HOME=$(cd $(dirname $0) && pwd)
# mobi file name. ex. RSSFeeds_201308220730
MOBI="RSSFeeds_`date +'%Y%m%d%H%M'`.mobi"
# mail configuration
KINDLE_ADDR=your@kindle.com
GMAL_ADDR=gmail-userid@gmail.com
GMAIL_USER=gmail-userid
GMAIL_PASSWD=gmail-password
# kindle, kindle_dx, kindle_fire, kindle_pw
OUTPUT_PROFILE=kindle_pw
if [ -f /etc/profile ]; then
. /etc/profile
fi
if [ ! -f $SEND_HOME/$1 ];
then
log "ERROR: recipe($1) not found."
exit 1
fi
CONV_OPTS="--output-profile=$OUTPUT_PROFILE"
EBOOKCONVERT="ebook-convert $SEND_HOME/$1 $SEND_HOME/$MOBI $CONV_OPTS"
echo "starting ebook-convert ..."
$EBOOKCONVERT
if [ $? -eq 0 -a -f $SEND_HOME/$MOBI ];
then
echo "starting ebook-smtp ..."
calibre-smtp -a $SEND_HOME/$MOBI \
--relay smtp.gmail.com --port 587 -e TLS \
-u $GMAIL_USER -p $GMAIL_PASSWD $GMAL_ADDR $KINDLE_ADDR \
-s 'RSS Feeds to Kindle' ''
if [ $? -eq 0 ];
then
echo "SUCCESS: send to kindle $MOBI"
rm -f $SEND_HOME/$MOBI
else
echo "ERROR: calibre-smtp failed."
fi
else
echo "ERROR: ebook-convert failed."
fi
メール送信に関わる設定を変更、シェルに実行権限を付与したらレシピ・ファイルと同じ場所に置いて、
$ chmod 775 sendtokindle.sh
$ ls
my.recipe sendtokindle.sh
crontab を編集して自動配信したい時間に呼び出します。 次の例では毎朝 7:00 にシェル・スクリプトを呼び出し、自動配信しています。
# cron for kindle
0 7 * * * /path/to/sendtokindle.sh my.recipe > /dev/null 2>&1
これで自分だけの定期配信システムが出来ましたね!
それでは、より良い Kindle ライフを。
Spidering hacks―ウェブ情報ラクラク取得テクニック101選
posted with amazlet at 13.08.22
Kevin Hemenway Tara Calishain
オライリー・ジャパン
売り上げランキング: 133,702
オライリー・ジャパン
売り上げランキング: 133,702
偽情報退散! マスコミとお金は人の幸せをこうして食べている (5次元文庫)
posted with amazlet at 13.08.22
THINKER
徳間書店
売り上げランキング: 5,239
徳間書店
売り上げランキング: 5,239