ひとりぶろぐ

価値ある情報をユーザー視点で発信するブログ

ReadabilityからKindleへの送信を自動化するKindability

      2012/11/27

ReadabilityからKindleに手間無く送りたい

Skitched 20121126 220656

オラKinle Paperwhite大好き、ひとりぶろぐのmoyashi (@hitoriblog) だ。よろしくな!

先日Tweetbotから「後で読む」したものをKindleに送る方法を紹介しました。

ひとりぶろぐ » Tweetbotで「後で読む」したものをKindle Paperwhiteで読む方法

この方法の欠点は、Readabilityに一度登録した後、手動で一つずつKindleに送信する必要があることです。

そこの自動化を考えてみました。

「Send to Kindle」機能はReadabilityがAPIを公開しておらず、正式にはプログラマブルな利用ができません。

それをむりくりやってしまうRack / Sinatraアプリreadability-kindleをgithubで発見したことを前回のエントリで紹介しました。

jipumarino/readability-kindle

readability-kindleはSinatraアプリですから、WebサーバでSinatraを動かす必要があり、環境設定がちょっと面倒です。また、実際に動かしてみたところ、Readabilityの仕様変更で動かなくなっていました。

それを直しつつ、cronで定期的に実行。Readabilityの未読項目を調べて、未読があったら自動的にKindleに送る、という動作にしたかったことから、普通のrubyスクリプトに書き換えてみました。

このrubyスクリプトにはKindabilityという名前を付けてみました。大したことはやっていません。

今回のエントリは、申し訳ないですが、サーバの管理がある程度できる人向けのものです。(続きは[Read More]から)

Kindabilityの働き

Kindabilityは、ReadabilityのReading Listの項目をすべてKindleのパーソナル・ドキュメントに送り、送り終わった項目をArchiveに移動するというものです。

ArchiveにあるものはKindleに送りません。

これを、例えば5分に1回実行するようにすると、Readabilityに項目を送信後、最大5分後にはKindleへの送信が完了することになります。1日に288回Readabilityにアクセスすることになるので、やや迷惑かもしれませんが。

Kindabilityのインストール

以下からアーカイブをダウンロードし、解凍後、rubyが動くサーバにコピー。

常時起動の状態にあるならば、(Mac) OS XでもOKです。ruby 1.8でも1.9でも動きます。

config.jsonを自分用に書き換えます。


{
    "readability": {
	"username": "YOUR_USERNAME",
	"password": "YOUR_PASSWORD"
    },
    "kindle": {
	"email_address": "YOUR@EMAIL.ADDRESS"
    }
}
  • username
    • Readabilityのユーザ名を指定
  • password
    • Readabilityのパスワードを指定
  • email_address
    • Kindleにパーソナル・ドキュメントを送るためのメールアドレスを指定

config.jsonにパスワードを生で書いているので、公開ディレクトリに置かないことをおすすめします。

config.jsonは、kindability.rbと同じディレクトリに置いておきます。

gemコマンドでmechanizeをインストール。ネイティブエクステンションを含むため、インストールの完遂のためにはMac OS Xの場合はXcode command line toolsのインストールが必要かもしれません。


sudo gem install mechanize

kindability.rbに実行権を付けておきます。


cd kindability-0.1
chmod +x kindability.rb

前回のエントリでやったAmazon.co.jp側、Readability側の設定は済ませていることが前提条件です。

ひとりぶろぐ » Tweetbotで「後で読む」したものをKindle Paperwhiteで読む方法

「アカウントサービス>My Kindle>パーソナル・ドキュメント設定>パーソナル・ドキュメントの保存」は「有効にできません」(訳語がおかしく、本来は「無効」だと思うのだけど)にしておくことをおすすめします。

Skitched 20121126 211928

Readabilityから送ったページをまとめて削除する方法が無さそうなためです。(運用自体の変更にもつながることから、だれにでも選択できることではないかもしれませんが)

「有効にできません」にしておくと、パーソナル・ドキュメントの後片付けをする必要が無くなります。

動作テスト

Kindabilityが動くかどうかテストします。ReadabilityのReading Listに項目を登録しておいてください。


./kindability.rb
3 article(s) processed.

こんな感じでメッセージが出ればOKです(項目が三つあった場合)。

ReadabilityのWebで確認すると、Reading Listにあった項目がArchiveされていると思います。

Archiveすることを未読フラグ代わり使っているので、使用目的に合わなかったらごめんなさい。

Kindleに送信してから、パーソナル・ドキュメントに登録され、それがKindle側で同期できるようになるまでは少し時間がかかります(Amazon.co.jp側の都合)。

cronへの登録

Kindabilityをcronに登録し、一定の時間間隔を置いて定期的に実行されるようにします。


crontab -e

viが起動するので、以下の行を追加して保存終了。


*/5 * * * * /home/your_path/kindability.rb

上記は実行を5分間隔として、kindability.rbとconfig.jsonは/home/your_path/に置いた場合の例です。

各自の環境に合わせて変更する必要があります。

あまり高頻度なアクセスはRedabilityへの迷惑になりますので、節度を持った利用をお願いします。

5分に1回もどうかっていう話がありますが。

設定を終わらせた後の利用手順

設定が済むと、以下のようなフローで利用できるようになります。

  • TweetbotでTLを眺めていて、気になったWebページをReadabilityに送信、あるいはブラウザ、RSSリーダからReadabilityにWebページを送信
  • 5分後以降にWi-Fi環境(あるいはiPhoneでWi-Fiテザリングするなどで)下でKindleの電源を入れる
  • Kindleでメニュー項目「同期してアイテムをチェック」を実行
  • KindleにReadabilityに送信したWebページがダウンロードされる

タイムラグがあるのと、Kindleでダウンロードするためには、Kindle Paperwhite 3GであってもWi-Fi環境下で同期を実行する必要があるといった制約(Kindle Paperwhite 3Gに元々ある制約)がありますが、手順としてはかなりシンプルになりました。

ブラウザ、RSSリーダ、TwitterからReadabilityにバシバシ送信、会社から帰りぎわ、あるいは出勤前に同期、っていう使い方はどうでしょうか。

 - iPad, iPhone, Kindle, Linux, OS X, Ruby