2013年09月20日

無料で出来る! KindleEar で作る自分だけの Kindle ニュース( RSS フィード)配信 Web サービス

僕は予定調和で押し付けがましくて退屈な物語・伝統的なメディアよりも、一つ一つは小さくても力強くてリアルで独自性があって読み手の頭の中で少しずつ世の中が浮き彫りになっていくような良質なブログ・メディアを読むが大好き。 だから RSS フィードを使ってマス化したブログ・ドキュメントを毎日 Kindle に自動配信して読むのが日課なんですが、この RSS フィードから Kindle ドキュメントを作成、自動配信するまでを”完全無料”で実現したい人にとってハルマゲドンになるかもしれないのが今日ご紹介する KindleEar なんです。

KindeEar icon


KindleEar を使った Kindle ドキュメント自動配信システムの仕組み


先日紹介した Raspberry Pi と Calibre を使った自作配信サーバーも小さいとはいえコストもスペースも必要になりますよね。


今日ご紹介するのは Google App Engine (以下 GAE )と呼ばれる Google が提供する無料のプログラミング実行環境( PaaS )を使って自分だけの RSS 配信サービスを開始できる KindleEar というプロダクトです。

GitHub - KindleEar


作られたのは上海在住の cdhigh さん。Kindle ドキュメントとプログラミングの知識を持つ技術者であれば GAE のようなサービスを使って自動配信するというアイデアは一度は頭に浮かびますが作るとなれば大変。 無料で公開してくれた cdhigh さんには感謝ですね。

さて今回構築するサービスの全体像はこう。

KindleEar ebook server overview

KindleEar は Python プログラミング言語で記述された Web アプリケーションで登録した RSS フィードを電子ドキュメント( mobi )に変換、 Gmail を使って毎日指定された時間に Kindle パーソナル・ドキュメントに送信する機能を持っています。

これを GAE にデプロイして自分だけの Web サービスを作ってしまおうという話なんです。

そう、まるで SENDtoREADER 、 Kindlefeeder のような有料配信サービスを個人で構築・利用するイメージ。

事前に用意するのは Google ( Gmail )アカウント。 これは GAE の登録と変換したドキュメントの送信に必要になります( Gmail アドレスは Amazon パーソナルドキュメント設定で承認済みEメールアドレスとして登録しておくこと)。

さあ、少しテクニカルですけど頑張りましょうね。


Google App Engine アカウントとアプリケーション ID の作成


Google App Engine のアカウントをこちら(https://appengine.google.com/start/newtos)から作成しましょう。

用意した Gmail アカウントでログイン。

01 GAE - create account


新しいアプリケーションを作ります。


02 GAE - start create appliction


初めて作成する場合には認証が必要で、これには携帯キャリアのメールアドレスを使います。 アドレスには @ 以降を省いた値を入力。

03 GAE - auth


すると、入力したメール・アドレスに認証コードが届くので、

05 GAE - auth code


これを Web ページに入力、認証に成功すると新しいアプリケーションの作成が可能になりますよ。

アプリケーションの作成ページではアプリケーション ID とタイトルを入力(僕のアプリケーション ID は netbuffalo-kinfeeder )。

06 GAE - create application


最後に画面下にある Create Application ボタンをクリックすればアプリケーションの作成はおしまい。

07 GAE - create application confirm

ここで入力したアプリケーション ID と貴方の Web サービス URL (僕の場合は http://netbuffalo-kinfeeder.appspot.com )はメモしておきましょう。

ここまで出来たら GAE の作業は一旦終わり。


KindleEar の設定・ Google App Engine へのアップロード


まず KindleEar を手に入れましょうか。 https://github.com/cdhigh/KindleEar へアクセスして、画面右にあるダウンロード・ボタンをクリック。

01 KindleEar - download zip


手に入れた KindleEar-master.zip を適当な場所に解凍、この中に含まれる app.yaml をエディタで開き、先頭行にある application: の値を先程 GAE で作成したアプリケーション ID に変更します。

yaml


あともう一つ。 config.py も編集しましょう(文字化けする場合は UTF-8 文字コードに対応したエディタで開きましょう)。

SRC_EMAIL の値に貴方の Gmail アドレスを、 TIMEZONE の値に UTC (協定世界時)との時差として日本であれば 9 を設定します。

py


これで KindleEar の初期設定はおしまい。

続いて Google App Engine SDK for Python をインストール。 開発するわけでは無いんですがクラウドへのアップロードに必要。

Download the Google App Engine SDK


ダウンロードしたパッケージに含まれる GoogleAppEngineLauncher を適当な場所(アプリケーション)にコピーして、

01 GAE SDK - unpack


これを右クリック・メニューから開きます。

02 GAE SDK - open installer


解凍、コマンドのリンク作成、起動が終わったら SDK は終了させて構いません。

02 GAE SDK - close launcher


Windows ユーザーはこの他に Python 2.7 系実行環境(http://www.python.jp/download/)もインストールしておいて下さいね。

さあ、これで準備は出来ました! ターミナル(端末)を開き、準備した KindleEar-master を次のコマンドで Google サーバーにアップロードします。

[netbuffalo:~] $ appcfg.py update ~/Downloads/KindleEar-master/
08:01 PM Host: appengine.google.com
08:01 PM Application: netbuffalo-kinfeeder; version: 1
08:01 PM 
Starting update of app: netbuffalo-kinfeeder, version: 1
08:01 PM Getting current resource limits.
Email: your@gmail.com
Password for your@gmail.com: 
08:02 PM Scanning files on local disk.
08:02 PM Cloning 9 static files.
08:02 PM Cloning 297 application files.
08:02 PM Uploading 2 files and blobs.
08:02 PM Uploaded 2 files and blobs
08:02 PM Compilation starting.
08:02 PM Compilation completed.
08:02 PM Starting deployment.
08:02 PM Checking if deployment succeeded.
08:02 PM Will check again in 1 seconds.
08:02 PM Checking if deployment succeeded.
- - - snip - - -
08:03 PM Deployment successful.
08:03 PM Checking if updated app version is serving.
08:03 PM Completed update of app: netbuffalo-kinfeeder, version: 1
08:03 PM Uploading index definitions.
08:03 PM Uploading cron entries.
08:03 PM Uploading task queue entries.


僕は Mac OS 、ホーム・ディレクトリの下にあるダウンロード・フォルダで作業したので KindleEar-master パスには ~/Downloads/KindleEar-master/ を指定しましたが、ここは皆さんの環境次第。

Windows であれば C ドライブの直下に KindleEar を解凍・作業してコマンド・プロンプトから、

c:\>appcfg.py update c:\KindleEar-master

とするのが、入力するパスが短く楽かもしれません。

py update


アップロードに成功したらブラウザで貴方のアプリケーションの URL を入力・アクセスしてみましょう。

お、僕だけの Kindle ニュース配信 Web サービスが開始している!

Kindle's Ear - http://netbuffalo-kinfeeder.appspot.com


KindleEar サービスの初期設定と RSS フィードの登録・配信


自分だけの KindleEar Web サービスが動き出したら、まず管理者パスワードを変更しましょう。

インストール直後の管理者ユーザ、パスワードは admin / admin 。

KindleEar Web Login


ログインしたら Admin メニューから管理者パスワードを変更。

KindleEar change admin password


続いて Setting > Base setting で貴方の Kindle Eメールアドレスを入力、配信時刻( Deliver time )と曜日も確認して、最後に Enable Deliver をチェックすれば自動配信が有効になります。

BlogPaint


同じページにある Custom Rss setting では Title 、Language( Japanese )、Oldest article (配信対象とする記事の期間)を設定。

KindleEar custom rss setting


Keep images , Enable deliver custom rss も忘れずにチェックしておきましょうね。

設定を保存したら Feeds メニューに移動して Custom Rss を登録。

KindleEar add custom rss form


登録する RSS フィード URL が http://fullrss.net/ などの全文変換サービスを経由しているのであれば isfulltext をチェック。

KindleEar add custom rss


Add ボタンで登録すれば準備はおしまい。 購読したい RSS フィードが複数あれば同じ手順で登録しましょう。

Setting メニューから Deliver now を実行するか、指定した定期配信時刻まで待つと・・・、

 
Kindle paperwhite home screen


無事、僕の Kindle へ配信されましたよ!

勿論、日本語、画像を含む記事だって大丈夫。

Kindle paperwhite personal document


配信履歴は Logs メニューで。

KindleEar show delivery logs


これで GAE のサービスが終了しない限り、 KindleEar で充実した Kindle パーソナル・ドキュメント生活を楽しめそうですね。

KindleEar には複数アカウントを登録することも出来ますから、家族・友人と共有しても良いかもしれません。
( GAE を無料で利用する場合にはリソース制限があり、これを越えた場合は翌月まで利用が停止するので注意)


それでは、より良い Kindle ライフを。



プログラミング Google App Engine
Dan Sanderson
オライリージャパン
売り上げランキング: 216,993

Posted by netbuffalo at 21:00│Comments(21)TrackBack(0)kindle | Webサービス


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

http://trackback.blogsys.jp/livedoor/netbuffalo/4587293
この記事へのコメント
5
netbuffaloさん
kakです。早速実践してみました。Pythonのバージョンが合わないのかコンソールからうまくデプロイ出来ませんでしたが、GAEランチャーからデプロイ出来ました。Kindlefeederではうまく読めてたものが一部バケているものがあったり、記事の順番が変更できない等あるようですが、画像容量の制限もないようなので、しばらく様子を見てみようと思います。いつもありがとうございます。
Posted by kak0000102161 at 2013年09月28日 12:15
kakさん、ご報告ありがとうございました。

kindlefeederほど完璧ではありませんが、選択肢が増えるのは嬉しいですよね。
アップロード出来て良かったです。
また面白いツールを見つけたらレポートしますね。
Posted by netbuffalo at 2013年09月28日 12:26
fabrss.com を試したら?毎日未読のフィードのアイテムをKindleに送信します。それに、1-clickしで、kindleから気になったアイテムをEvernoteとPocketに保存できます。
Posted by stentor at 2013年09月30日 19:32
stentorさん、コメントありがとうございます。
うーん・・・すごく良さそうなサービスですね!
早速試してみます。
良い情報を教えて頂き、本当にありがとうございました。
(一度試してみてから記事にするかもしれませんが、何卒よろしくおねがいします)
Posted by netbuffalo at 2013年09月30日 19:51
netbuffaloさん

yamaninです。早速、試しにコマンドプロンプトからアップロードしました。
コマンドプロンプト画面で、紹介されているのと同じメッセージが出たのでアップロードは成功したと思うのですが、その後、URLを入力してもKindleEarサービスが立ち上がらないのです。アップロードしてから、webサービスが立ち上がるまでに、時間がかかるのでしょうか?

よろしくご教示下さい。
Posted by yamanin at 2014年06月21日 12:50
netbuffaloさん

yamaninです。無事にdeployできました。
ありがとうございます。
Posted by yamanin at 2014年06月21日 22:25
yamaninさん

無事動いたようで何よりです!
Posted by netbuffalo at 2014年06月22日 00:41
netbuffaloさん

何度も申し訳ありません。
deployはできたのですが、以下のようなメッセージが出ます。

08:19 PM WARNING: Performance settings included in this update are being ignored because your application is not using the Modules feature. See the Modules documentation for more information. Python:
(中略)
Error 400: --- begin server output ---
Validation error: Invalid dispatch configuration - module 'default' does not exist. Upload a version of this module and try again.
--- end server output ---

このメッセージの影響なのか分かりませんが、KindleEarで「DeliverNow」ボタンを押下しても、一向に配信されません。おわかりになれば、原因・解決策をご教示頂けますでしょうか。

よろしくお願い申し上げます。
Posted by yamanin at 2014年06月22日 20:55
yamaninさん、何度でも大丈夫です。
ご質問頂いたエラーの件、少し調べましたのでコメントします。
dispatch.yaml というファイルの中に module: default という記載があるかと思います。
ご質問頂いたエラー・メッセージはこの module: default が原因で出力されているようです。
試していないので確証は無いのですが、ここを module: worker とすればエラーは解消されそうです。
ただ、これで配送(DeliverNow)が動くかはわかりません。
うーん、何か分かりましたらまたご報告しますね。
Posted by netbuffalo at 2014年06月23日 14:55
netbuffaloさん

dispatch.yaml というファイルの中に module: default という記載を module: worker としてdeployしました。

今度は、 'worker' が存在しないとメッセージが!!
他に何か原因があるんでしょうかね。

Error 400: --- begin server output ---
Validation error: Invalid dispatch configuration - module 'worker' does not exist. Upload a version of this module and try again.
--- end server output ---
Posted by yamanin at 2014年06月23日 22:23
yamaninさん

お、そうですか・・・。十分な確認もせず伝え、yamanin さんにはお手数をおかけしてしまい申し訳ありません。
もう少し調べてみますが少々お時間を下さい(中々時間を作れず・・・)。
ちなみに設定した時刻に送信する定期配信機能も動きませんか?
Posted by netbuffalo at 2014年06月24日 18:17
お急ぎでしたら僕のKindleEarを使ってみて下さい。
(もしかしたら同じエラーが出るかもしれませんが・・・)

http://netbuffalo-kinfeeder.appspot.com
yamanin/yamaninでログイン出来ます。

もし、配信出来ればこちらをずーっと使って頂いても結構です。
(その際はパスワードを変更下さい)
Posted by netbuffalo at 2014年06月24日 18:22
netbuffaloさん

netbuffaloさんのKindleEarを使わせて頂きましたが、ちゃんと配信できました。ご好意に甘えて利用させて頂きます。本当に助かります。大変にありがとうございます。
Posted by yamanin at 2014年06月24日 23:36
yamaninさん、それは良かったです。
僕はKindleEarは普段使っていないので是非どうぞ。
Posted by netbuffalo at 2014年06月25日 08:23
netbuffaloさん

初めまして,cogsworthと申します.
いつも楽しく拝読しております.
この度kindleを導入し,かねてから気になっていたkindleearに挑戦することにしました.
しかし,以下のようなメッセージが表示されます.
メッセージを無視して配信の設定などしてみましたが,配信されません.
お忙しいところ大変恐縮ですが,解決方法など教えていただければ幸いです.

08:51 AM Uploading task queue entries.
08:51 AM Uploading dispatch entries.
Error 400: --- begin server output ---
Validation error: Invalid dispatch configuration - module 'default' does not exi
st. Upload a version of this module and try again.
--- end server output ---
Posted by cogsworth at 2014年11月24日 08:56
cogsworthさん、ご質問ありがとうございました。

似たようなご質問を頂いたことがあるのですが調べる時間が無くすぐに解決方法をお伝えすることが出来ません。

ついては僕のKindle Earにアカウントを作っておきますのでまずはこちらで楽しんで頂きたく。

今日の夕方には作ってご連絡します。
Posted by netbuffalo at 2014年11月24日 10:26
cogsworthさん、僕のKindle Earへcogsworthさんのアカウントを作っておきました。
ユーザ名、パスワードともにcogsworthです。ログイン後にパスワードを変更下さい。

http://netbuffalo-kinfeeder.appspot.com/

よろしくお願い致します。
Posted by netbuffalo at 2014年11月24日 14:36
netbuffaloさん

記事を書かれてから1年経っているのに,親切に回答していただけて感動しています.
ありがとうございました.
わざわざアカウントまで作っていただいたのですが,今朝から試行錯誤をしてなんとか成功しました.
今後挑戦される方のために,私の方法をこの場を借りて報告させていただきたいと思います.

大体は記事のとおりですが,バージョンが違うのか2点注意が必要です.
まずyamlファイルとpyファイルの書き換えですが,記事にある3箇所以外にもう2箇所書き換えが必要なようです.
ただ,helper.pyを使えばプロンプト上で順にメールアドレスなどを打ち込めば自動で書き換えをしてくれます.
次に,デプロイの際のコマンドは,
appcfg.py update app.yaml module-worker.yaml
としました.

あくまでも私がこの方法で成功しただけで正しい方法かどうかは分かりませんが.
(久しぶりの中国語で大分苦戦しました.)

rssの配信は色々と試しましたがkindleearが一番便利だと思います.
kindleearを紹介してくださったnetbuffaloさんには感謝の気持ちでいっぱいです.
これからはkindleでnetbuffaloさんの記事を読ませていただきます.
更新など頑張ってください!!
長文で失礼しました.
Posted by cogsworth at 2014年11月24日 19:25
こちらこそ、一緒に試行錯誤して頂ける人がいる事に感動しました。ありがとうございました。
Posted by netbuffalo at 2014年11月24日 20:53
5
素晴らしい記事ありがとうございます!
無事設定できました。

ヤフーニュースのトップニュースを全文で読みたいですが、
全文変換のRSSを加えてみたところ、
すべて、写真抜きや全文でない配布になってしまいました。ご案内になった全文変換サービスも含めます。
他のRSSは無事に写真付きの全文を読めていますので、
Kindleear の設定の問題ではないと思われます。
他にいい全文変換サービスがございましたら、
ぜひ教えていただきたいと思います。
何卒よろしくお願いします。
メールにてご返事願います。
Posted by lp at 2015年07月31日 13:36
lpさん、ご相談ありがとうございます。
詳しくはメールしましたが Yahoo トップ・ニュースは難しいと思います。
Posted by netbuffalo at 2015年07月31日 16:30

コメントする

名前
URL
 
  絵文字