Hatena::Groupstudyroom

memo+ubuntu

 | 

2011-12-17

Kindle に gmail 経由で日本語 RSS を流しこむ(RSS to Kindle via gmail on Mac)

03:41

Kindleフィード読みたい、そんな時に

http://kindlefeeder.com/ を使うってのがひとつ。


Web で公開されてる ruby で動く kindle-feeds ってのでいけそうだというのでメモ。

http://danielchoi.com/software/kindle-feeds.html

ターミナルからgmail経由してメール送るとか、cron動かしてみるとかやったことなかったのでついでに。


なお初心者も初心者、プログラミングとか全く出来ないので平にご容赦…

逆に言えばあんまり知らなくてもここまで出来るってことっぽい

KindleFeeds導入

danielchoiさんのサイトを全面的に参考に。

0. MacインストールDVDからxcodeインストール

1. ターミナルを開いて

sudo gem install kindle-feeds

2. Documents(書類)フォルダ以下にKindleFeedsフォルダを作成

mkdir Documents/KindleFeeds

3. 移動

cd Documents/KindleFeeds

4. 試しに実行

kindle-feeds

5. kindle_feeds.confが出来上がるので適当なエディタでサイトを追加してもう一度実行…

なのですが!このままだと日本語のサイトのRSS文字化け+中身を消される。

ここにソースコードがあるのですが

https://github.com/amontano/kindle-feeds

Iconvメソッドで無理やりutf-8RSSiso-8859-1にしているっぽい。iso-8859-1で定義されてない文字は消すみたいなことが書いてある…

のでそこをutf-8に変えてやる必要がある。

よくわからないのでutf-8utf-8にするみたいな処理になってしまった。

もっと賢いやり口があると思います。MITライセンスなので著作権者を明示しておけばいいのだよね?

6. Macintosh HD の ライブラリ(Library)/Ruby/Gems/1.8/gems/kindle-feeds-1.0.6 が本体なので

lib フォルダ以下の kindle-feeds.rb のこの部分を

ic = Iconv.new('ISO-8859-1//TRANSLIT', 'utf-8') 
ic2 = Iconv.new('ISO-8859-1//IGNORE', 'utf-8') 

ic = Iconv.new('utf-8', 'utf-8') 
ic2 = Iconv.new('utf-8', 'utf-8')

にする。但しそのままだと編集できないのでどっかにコピーとっておいて管理者権限で上書きする必要あり。

7. 同じフォルダにある kindle-feeds.erb.html 内の meta タグ中の iso 云々を utf-8 に変える。ここも管理者権限が要る。

たぶんほんとはこういうことしちゃいけないんでしょうか??ちょっとよくわかりません。

これでようやく日本語のRSSが扱えるようになる。Documents/KindleFeeds/以下で kindle-feeds を実行すれば Kindle Feeds 日-月-年.html みたいなファイルが出来る。

これをユーザネーム@free.kindle.comにメールで送ればKindleで読める…のだけどめんどくさい。これも自動化したい。

その前に日本語のサイトのRSSはたいてい広告とか入ってる上に中身スカスカなのでYahoo!pipesで処理する。


Pipesを使う

省略。

一例はここに。朝日新聞ヘッドラインだけ作ったけど微妙かも。

Wired.jp 一ページ目だけ配信 広告排除 http://pipes.yahoo.com/pipes/pipe.info?_id=c6b3e8cbacb102b9839b7ddbb5330327

朝日新聞 広告・CnetZDnet排除 http://pipes.yahoo.com/pipes/pipe.info?_id=83c12722c0650363e7ffef99144ad858

Pipes正規表現がちゃんと動かないのか自分のアレが足りないのかわからないけどクソみたいなフィルタなのであまりみてほしくないです。

なんか作ってくれといわれたらPipesくらいなら弄れそうな気がします。


ターミナルからメールを送る

1. ruby の tmail というライブラリがどうもいいらしい。のでインストール

sudo gem install tmail

2. Gmailにつなげるにはこのライブラリも要るらしい。

sudo gem install tlsmail

3. こことかhttp://yakinikunotare.boo.jp/orebase/index.php?Ruby%2FTMail ここのコピペhttp://d.hatena.ne.jp/unageanu/20090429/1241001029

後者のスクリプトで、変えなければならないのは mail.to, mail.from, mail.subject, mail.body(これはKindleに送る場合不要), Net::SMTP.start( "smtp.gmail.com", 587, "localhost.localdomain(ここは変えなくて良い)", "foo@gmail.com(変える)", "<パスワード>(もちろん変える)", "plain")の場所。localhost.localdomainでいいことに気をつける。

4. 後者のスクリプトで試しに自分のgmailに送ってみる。OK。

5. html を添付できるようにする。ここで時間食った。content_type を text/html にしていたため。

最終的にはこんな↓↓感じになった。どんなに頻繁に動かすとしても一時間に一回なので

そのファイルを取ってこれるように kindle-feeds.rb を編集してKindle Feeds %Y-%m-%d-%H.htmlになるように書き換えておき、それにあわせてこのスクリプトもかきかえた。

require 'rubygems'
require 'tmail'
require 'tlsmail'
require 'base64'

date = Time.now.strftime('%Y-%m-%d-%H')

# メールを作成、時刻入り
mail = TMail::Mail.new
mail.to = 'キンドルユーザ@free.kindle.com'
mail.from = 'ユーザ@gmail.com'
mail.subject = 'RSS ' + date
mail.date = Time.now
mail.mime_version = '1.0'
#本文は不要

#作成した時間のhtmlファイルを取ってくる
outfile = "Kindle Feeds #{date}.html"

#Base64でひらいて送る、添付準備
attach = TMail::Mail.new
attach.body = Base64.encode64 File.open("/Users/ユーザ/Documents/KindleFeeds/#{outfile}", "rb").read
#content_typeは text!
attach.set_content_type 'text','html','name'=>outfile
attach.set_content_disposition 'attachment','filename'=>outfile
attach.transfer_encoding = 'base64'

#添付
mail.parts.push attach
puts mail.encoded

Net::SMTP.enable_tls(OpenSSL::SSL::VERIFY_NONE)
Net::SMTP.start( "smtp.gmail.com",  587, "localhost.localdomain", "ユーザ@gmail.com", "パスワド", "plain"){ |smtp| 
  smtp.sendmail(mail.encoded, mail.from, mail.to) 
}

みたいな感じ。これをmail.rbにして保存。間違ってるとこもあると思うので訂正お願いします。


Cron で定期実行

CronniX とかいうのがあったのでインストールhttp://www.moongift.jp/2010/06/cronnix/

ただこれくらいならインストールいらなかったかも。launchdというのが最近の主流らしいのだがよくわからんすぎて断念。

ひとまず一日一回実行するような設定にしてみる。

Kindlefeeds.shファイルに

cd Documents/KindleFeeds
kindle-feeds

と書き、Kindlemail.sh

cd Documents/KindleFeeds
ruby mail.rb

と書いてKindleFeedsフォルダにでも保存


あとは

sh /Users/ユーザ/Documents/KindleFeeds/Kindlefeeds.sh

sh /Users/ユーザ/Documents/KindleFeeds/Kindlemail.sh

を毎日22時とかに実行すればいけそう。

原始的に最初のやつを22:30に、次のやつを22:35みたいな感じで設定してるけど、たぶんもっと賢いやり方があるのでしょう。

でもまあ動いてるしよしとしよう。一般人でも出来る!!!!!

oqunooquno2011/12/18 16:34ebook-convertも便利

 |