2013年09月12日

RPi - Raspberry Pi と Calibre で作る自分だけの Kindle ニュース( 全文RSS )配信サーバー

今日は Raspberry Pi (省電力、省スペース小型 PC ボード)を使った自作サーバー第一弾として Kindle 向けにニュース配信サーバーを作ってみますよ。 同様のサービスには SENDtoREADER (http://sendtoreader.com/), KindleSend (http://www.kindlesend.com/)がありますが、何れも自動配信は有料。 Raspberry Pi を使えばクレジットカード、個人情報を登録することも無く5000円程度で自分だけの配信サーバーを作れちゃいます。

raspberry pi で作る kindle 電子書籍配信サーバー


Raspberry Pi のセットアップとニュース配信サーバーの概要


Raspberry Pi のセットアップ方法はこちら。 まずはネットワーク接続、日本語環境の設定まで終らせましょう。

RPi - Raspberry Pi ファースト・インプレッション + 押さえておきたい初期設定


今回作成するシステムの全体像はこう。

kindle ニュース自動配信サーバーの概要


自宅の LAN に接続した Raspberry Pi 上で Calibre を動かし、登録した Web サイトの RSS フィードを全文に変換、Kindle 標準電子書籍フォーマットである mobi ファイルとして自分の端末にメール( Send to Kindle )で送信・定期購読します。

定期配信する為に PC を常に起動しておくのは大変ですが、 Raspberry Pi なら省電力、省スペースで安心。

kindle and raspberry pi


こちらの記事を参考に、事前に送信用 Gmail アドレスの用意、Kindle 側受信アドレス許可設定、Calibre レシピの考え方を理解しておいて下さいね。

Calibre を使って全文変換した RSS フィード を Kindle へ自動配信する方法


じゃあ早速始めましょうか。


Raspberry Pi への Calibre インストールとニュース( RSS )配信設定


初期設定の終わった Raspberry Pi に SSH クライアントでログインし、次のコマンドで Calibre をインストールします。

pi@raspberrypi ~ $ sudo apt-get install calibre

パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下の特別パッケージがインストールされます:

  calibre-bin fonts-liberation gir1.2-glib-2.0 imagemagick imagemagick-common
  javascript-common libchm1 libdjvulibre-text libdjvulibre21 libexiv2-12
  libgirepository-1.0-1 libilmbase6 libjs-jquery libjs-sphinxdoc libjs-underscore
  liblensfun-data liblensfun0 liblqr-1-0 libmagickcore5 libmagickcore5-extra
  libmagickwand5 libmysqlclient18 libnetpbm10 libopenexr6 libpodofo0.9.0 libqt4-dbus
  libqt4-declarative libqt4-designer libqt4-help libqt4-script libqt4-scripttools
  libqt4-sql libqt4-sql-mysql libqt4-test libqt4-xmlpatterns libqtassistantclient4
  libtidy-0.99-0 libwmf0.2-7 mysql-common netpbm python-beautifulsoup python-chardet
  python-cherrypy3 python-cssutils python-dateutil python-dbus python-dbus-dev
  python-dnspython python-feedparser python-gi python-imaging python-libxml2 python-lxml
  python-mechanize python-pkg-resources python-pyparsing python-qt4 python-repoze.lru
  python-routes python-sip python-utidylib python-webob qdbus ufraw-batch
  wwwconfig-common
... snip ...
アップグレード: 0 個、新規インストール: 66 個、削除: 0 個、保留: 0 個。
44.1 MB 中 35.8 MB のアーカイブを取得する必要があります。
この操作後に追加で 137 MB のディスク容量が消費されます。
続行しますか [Y/n]? y


最新バージョンは使えませんが、依存関係が膨大なので apt-get を利用するのが吉。

pi@raspberrypi ~ $ calibre --version
calibre (calibre 0.8.51)


後は読みたい RSS フィードを登録した Calibre レシピを作成、自動配信設定を行いますが出来るだけ簡単に楽しんで貰うために今日は配信スクリプトを用意しましたよ。 こちらのリンクから tar ボールをダウンロードしましょう。




この中には Calibre サンプル・レシピ、mobi 変換・メール送信スクリプトが含まれています。

このファイルを Raspberry Pi に SFTP でコピー、適当な場所に解凍。

pi@raspberrypi ~ $ tar xvzf rss2kindle-xxxxxxxx_xx.tgz


設定ファイルをエディタで開き、

pi@raspberrypi ~ $ vi rss2kindle/conf/rss2kindle.conf


送信先 Kindle のメールアドレス、送信に利用する Gmail のアドレス設定を行います。

# mail configuration
MAIL_ADDR_TO=your@free.kindle.com

MAIL_ADDR_FROM=yourgmailid@gmail.com
SMTP_USER=yourgmailid
SMTP_PASSWD=yourgmailpassword

SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_ENCRYPTION_METHOD=TLS

# kindle, kindle_dx, kindle_fire, kindle_pw
OUTPUT_PROFILE=kindle

現時点では Calibre バージョンが 0.8 系であり、 Kindle Paperwhite 用プロファイル( kindle_pw )は設定出来ないので OUTPUT_PROFILE は kindle のままでOK。 

最後にレシピを用意しましょう。 recipe ディレクトリにあるサンプル・レシピをコピー。

pi@raspberrypi ~ $ cp rss2kindle/recipe/my.recipe.sample rss2kindle/recipe/my.recipe


コピーしたレシピをエディタで開き、fullrss.net (http://fullrss.net/)のような全文変換サービスを経由した RSS フィード URL を複数登録します。

pi@raspberrypi ~ $ vi rss2kindle/recipe/my.recipe

class MyDailyFeedRecipe(BasicNewsRecipe):
  title                 = u'My RSS Feeds'
  oldest_article        = 1 # olsest days
  max_articles_per_feed = 50
  language              = 'ja'
  timefmt               = '%Y-%m-%d %H:%M'
  no_stylesheets        = True
  use_embedded_content  = True
  feeds                 = [
                           (u'ニュース', u'http://feed1.com/rss')
                           ,(u'趣味', u'http://feed1.com/rss')
                          ]


もし、全文変換サービスを経由しない単純な RSS フィード URL を登録する場合は、 use_embedded_content の値は False にしましょう(ただし、この場合には Calibre が直接 Web サイトにアクセス、本文解析を行うので CPU 負荷、メモリ使用量が大きくなるので注意が必要)。

これで設定はおしまい。


Kindle 向けニュース( RSS )配信の確認と自動化設定


まずはマニュアルで動作確認してみましょう。 次のコマンドで配信スクリプトを起動。

pi@raspberrypi ~ $ rss2kindle/bin/rss2kindle.sh


このスクリプトは recipe ディレクトリにある *.recipe ファイルを指定して ebook-convert コマンドを実行、mobi ファイルの作成に成功すると calibre-smtp コマンドを使って設定した Kindle 用メールアドレスに書籍を送信してくれます。

pi@raspberrypi ~ $ rss2kindle/bin/rss2kindle.sh 

-------- starting ebook-convert RECIPE: my.recipe -------
1% 入力をHTMLに変換中...
InputFormatPlugin: Recipe Input running
1% フィードの取得中...
... snip ...
MOBI output written to /home/pi/rss2kindle/mobi/my_201309111922.mobi
出力を名前をつけて保存   /home/pi/rss2kindle/mobi/my_201309111922.mobi
starting ebook-smtp ...
SUCCESS: send to kindle my_201309111922.mobi

待つこと 5 分程。 Kindle に書籍が配信されれば成功。

kindle home screen


最後に残るのは配信の自動化。 これには cron を使いましょう。

次のコマンドで crontab エディタ(デフォルトのエディタは nano)を開き、

pi@raspberrypi ~ $ crontab -e


例えば 朝 7:00 に自動起動するなら次のような行を crontab に挿入します。

0 7 * * * /home/pi/rss2kindle/bin/rss2kindle.sh > /dev/null


え、nano エディタの使い方なんてよくわからない? そういう人の為に addcron.sh というシェルもご用意しておきましたよ!

次のコマンドを実行すると時間は固定ですが AM 7:00 に自動起動するよう rss2kindle.sh を crontab へ登録してくれます。

pi@raspberrypi ~ $ sudo rss2kindle/bin/addcron.sh


ね、登録されているでしょ。

pi@raspberrypi ~ $crontab -l
0 7 * * * /home/pi/rss2kindle/bin/rss2kindle.sh


これで毎日朝には貴方の趣味趣向に合わせた・既存マスメディアではフォローしきれない最新・専門性高い情報が毎日 Kindle に届きますよ。

send full rss feed to kindle


うまく自動配信が動かないという人はログ( rss2kindle/logs/rss2kindle.log )ファイルを見てみましょう。

それでは、また今度。


Raspberry Pi Type B 512MB
Raspberry Pi Type B 512MB
posted with amazlet at 13.09.12
RS Components Ltd
売り上げランキング: 247

New Pibow パイボー Raspberry Pi レインボー ケース
PiMoRoNI
売り上げランキング: 135,078

Posted by netbuffalo at 22:00│Comments(0)TrackBack(0)kindle | Raspberry Pi


この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/netbuffalo/4580037

コメントする

名前
URL
 
  絵文字