kindleでニュースを読む

RSSなどのフィードを使って、kindleでニュースなどの記事を読む方法

構成、流れ

  • サーバーで行う作業
    • ebookの作成: フィードからデータを取得してepubを作成
    • メールの送信: 作成したebookを、kindleライブラリに送信
  • kindleライブラリー
    • ebookの保持と配布
  • 端末
    • ebookの受取と閲覧

サーバーで行う作業

フィードの取得・ebookの作成をcalibreで行う。

ファイル構成

# パスの通った場所に実行ファイルと設定ファイル、calibreのレシピも用意する。
$ ls -l ~/bin
-rw-r--r-- 1 mg mg  223 Jun 16 12:03 conf.txt
-rwxr-xr-x 1 mg mg 1728 Jul 27 09:45 rsstokindle.sh

$ ls -l ~/.config/calibre/custom_recipes
-rw-r--r-- 1 mg mg 2225 Jul 17 09:03 news_1111.recipe

recipeの用意

calibreのGUIから用意しても良い。 feeds=[]内に同じフォーマットで列挙していけば、複数のフィードを登録できる。 パラメーターは好みに応じて設定する。

$ cat news_1111.recipe
# vim:fileencoding=utf-8
from calibre.web.feeds.news import BasicNewsRecipe

class AdvancedUserRecipe1678082873(BasicNewsRecipe):
    title          = 'news'
    oldest_article = 7
    max_articles_per_feed = 10
    auto_cleanup   = True

    feeds          = [
	('https://cookiehookey.neocities.org/index.xml'),
    ]

conf.txtの中身

KINDLE_ADDRは、send to kindleで使う送信先のアドレス、amazonのページから探す(参照)

$ cat conf.txt
# mail configuration
KINDLE_ADDR="example@kindle.com" # kindleの送信先アドレス
MAIL_ADDR="user@example.com" # メール送信で使う送信元の自分のアドレス
MAIL_USER="user" # ユーザー名、アドレスの@以前の部分
MAIL_PASSWD="your-strong-mail-password" # メールのパスワード

rsstokindle.shの中身

calibreでRSSフィードの取得、ebookの作成、メールの送信を行う。

$ cat rsstokindle.sh
#!/bin/bash
 
##################### configurations #########################################
# load mail configuration
source ~/bin/conf.txt
 
#working_directory
recipe_dir="/home/mg/.config/calibre/custom_recipes/news_1111.recipe"
output_dir="/home/mg/Downloads"
 
# file name. ex. RSSFeeds_201308220730
output_file_b="RSS_`date +'%Y-%m-%d_%H-%M'`.mobi"
output_file="RSS_`date +'%Y-%m-%d_%H-%M'`.epub"
 
# kindle, kindle_dx, kindle_fire, kindle_pw
conv_opts="--output-profile=kindle"
 
##################### run programs #########################################
echo "starting ebook-convert ..."
# mobiで取得してから、epubに変換することで、amazon側でのフォーマットエラーを減らす。
ebook-convert $recipe_dir $output_dir/$output_file_b $conv_opts
ebook-convert $output_dir/$output_file_b $output_dir/$output_file $conv_opts
 
# send email to kindle library
if [ $? -eq 0 -a -f $output_dir/$output_file ];
then
    echo "starting ebook-smtp ..."
    calibre-smtp -a $output_dir/$output_file \
    --relay disroot.org --port 587 -e TLS \
    -u $MAIL_USER -p $MAIL_PASSWD $MAIL_ADDR $KINDLE_ADDR \
    -s 'RSS Feeds to Kindle' ''
    if [ $? -eq 0 ];
        then
        echo "SUCCESS: send to kindle $output_file"
        # 以下はcronでの実行時にエラーが出た時のdebug用
        #echo "SUCCESS: send to kindle $output_file" >> ~/bin/dbg-msg.txt
        rm -f $output_dir/$output_file_b
        rm -f $output_dir/$output_file
    else
        echo "ERROR: calibre-smtp failed. NAME: $output_file"
        #echo "ERROR: calibre-smtp failed. NAME: $output_file"  >> ~/bin/dbg-msg.txt
    fi
else
    echo "ERROR: ebook-convert failed. NAME: $output_file"
    #echo "ERROR: ebook-convert failed. NAME: $output_file"  >> ~/bin/dbg-msg.txt
fi

プログラムの実行

手動であれば都度実行、自動であればcronで設定。

# serverではなく、client側以下のように設定もできる
$ which rss-to-kindle
rss-to-kindle: aliased to ssh {host-name} /home/mg/bin/rsstokindle.sh > /dev/null 2>&1
$ rss-to-kindle
$ crontab -e
# 以下は1日おきに朝6時に実行
00 06 */2 * * /home/mg/bin/rsstokindle.sh > /dev/null 2>&1

まとめ

上記の方法で、フィードを提供しているサイトであれば、newsをkindleで読めるようになる。

また、応用として、wallabagを用いれば、記事単位で読みたいものだけを追加して、後でkindleで読むということも出来る。