2012 年 12 月の履歴(もしくは日誌)


2012 年 12 月

12 月 15 日

『津田大介のメールマガジン「メディアの現場」』を自動で Kindle Paperwhite にプッシュ

津田大介さんのメールマガジン「メディアの現場」を購読しています.このメールマガジンは ePub 版も配布されていて ePub 版のほうが読みやすいです.その ePub 版を Kindle Paperwhite に自動転送できたら便利かなと思って,試してみたらうまくいきました.で,どうやったのかを紹介します.

動作はこんな感じ.

  1. iMac がメールを受信すると AppleScript を起動する.
  2. AppleScript が Fake.app というスクリプトで自動化できるブラウザを起動して ePub をダウンロードする.
  3. 続いて AppleScript がシェルスクリプトを起動して,シェススクリプトが ePub を Dropbox の指定フォルダに移動する.
  4. Wappwolf のサービスが Dropbox に保存された ePub ファイルを Kindle 用のファイル形式に変換して Kindle にプッシュする.
  5. Kindle Paperwhite がコンテンツを受信する.
  6. 「メディアの現場」が Kindle Paperwhite で読める!

つまり Mac 環境の話です.

ここでの説明では次のようなディレクトリ構造の前提があります.

~/Dropbox/Workflow/
ここに yakan-hiko-tuda-epub-recent-download.fakeworkflow ファイルと yakan-hiko-tuda-epub-recent-download.bash を置いてます.これは AppleScript 側にそう書いています.
~/Library/Application Scripts/com.apple.mail/
ここに yakan-hiko-tuda-epub-recent-download-mail.scpt を置きます.
ここに AppleScript を置くと Mail.app のルールから起動できます.
~/Downloads/
ePub ファイルはここにダウンロードされます.
~/Dropbox/SendToKindle
ePub ファイルがここに移動されると Wappwolf のサービスがファイルの変換をします.

まずは AppleScript を書きます.

tell application "Finder"
   activate
   set myDocument to (path to home folder as text) & "Dropbox:Workflow:yakan-hiko-tuda-epub-recent-download.fakeworkflow"
   open document file myDocument
end tell
tell application "Fake"
   activate
   run workflow
   delay 30
   quit
end tell
tell application "Finder"
   activate
   set script_name to (path to home folder as text) & "Dropbox:Workflow:yakan-hiko-tuda-epub-recent-download.bash"
   set script_name to script_name as alias
   set script_name to quoted form of POSIX path of script_name
   set my_result to do shell script "sh " & script_name
end tell

この AppleScript は Fake.app の起動と Fake.app の Workflow (スクリプト)の実行,およびシェルスクリプトの実行をします.

これを ~/Library/Application Scripts/com.apple.mail/ に yakan-hiko-tuda-epub-recent-download-mail.scpt って名前で保存しました.

そのあと Mail.app の「メール」メニューから「環境設定...」のルールを選びます.でルールを新規で作って,not_reply@yakan-hiko.com からメールが届いたら AppleScript を実行するように設定します.正しいところに yakan-hiko-tuda-epub-recent-download-mail.scpt を保存しておけば,yakan-hiko-tuda-epub-recent-download-mail.scpt を選択できます.

つぎに Fake.app です.Fake.app では自動実行用のスクリプトみたいなのを Workflow って言います.そいつを Dropbox の Workflow っていうフォルダの中に起きました.これはどこに置いても良いですが,別の場所に置く場合は先に説明した AppleScript の内容も書き換える必要があります.

Load http://yakan-hiko.com/list.php?no=11
Delay for 2.0 seconds
if text 'ログイン'
   Click Link '/HTML[1]/BODY[1]/DIV[4]/DIV[2]/DIV[1]/SPAN[3]/A[1]'
   Delay for 2.0 seconds
   Set '/HTML[1]/BODY[1]/DIV[4]/DIV[2]/DIV[3]/FORM[1]/FIELDSET[1]/TABLE[1]/TBODY[1]/TR[2]/TD[1]/INPUT[1]' to 'username'
   Set '/HTML[1]/BODY[1]/DIV[4]/DIV[2]/DIV[3]/FORM[1]/FIELDSET[1]/TABLE[1]/TBODY[1]/TR[3]/TD[1]/INPUT[1]' to 'password'
   Click Element '/HTML[1]/BODY[1]/DIV[4]/DIV[2]/DIV[3]/FORM[1]/FIELDSET[1]/DIV[1]/INPUT[2]'
   Load http://yakan-hiko.com/list.php?no=11
   Delay for 2.0 seconds
End If
Click Link '/HTML[1]/BODY[1]/DIV[4]/DIV[2]/DIV[4]/FIELDSET[1]/DIV[1]/UL[1]/LI[2]/A[1]'
Delay for 2.0 seconds
Click Link '/HTML[1]/BODY[1]/DIV[4]/DIV[2]/DIV[4]/FIELDSET[1]/DIV[1]/DIV[3]/TABLE[1]/TBODY[1]/TR[1]/TD[1]/A[2]'

username と password の所は,それぞれ夜間飛行のアカウントにあわせて書き換えてください.上に Workflow をテキストで書いて示しましたが,Fake.app ではこれをコピーアンドペーストしたりして使えないので,後で示すリンクから Workflow をダウンロードしてください.

Fake.app では GUI で操作すればクリックする HTML の要素を XPath の表現に変換します.そういう所が便利です.

Fake.app の Workflow が実行されたら,次に AppleScript からシェルスクリプトが実行されます.

#!/bin/bash
cd ~/Downloads/
recentepubfile=`ls -t *.epub | head -n 1`
if [ $recentepubfile ]; then
   downloadedfile="${HOME}/Downloads/${recentepubfile}"
   dropboxfile="${HOME}/Dropbox/SendToKindle/${recentepubfile}"
   mv $downloadedfile $dropboxfile
fi

これは単純にファイルを移動しているだけです.ホームディレクトリに Dropbox フォルダがあって,その中に SendToKindle フォルダがある事が前提です.ダウンロードした ePub ファイルを SendToKindle フォルダに移動します.

Dropbox に ePub をコピーできれば,あとは Wappwolf っていうサービスを使えば ePub を Kindle 用 mobi 形式に変換して Kindle Personal Documents Service にメール送信まで自動でやってくれます.それは Pieces of Peace というブログで丁寧に解説されていますので,そちらをご覧ください.

ぼくが使っているスクリプトファイルなんかを zip でかためて置いておきます.そのまま簡単にすぐに使えるって感じぢゃないけど.

ここで紹介しているスクリプトとか
http://onohiroki.cycling.jp/archives/yakan-hiko-tuda-epub-kindle.zip

いろいろなツールを組み合わせてますが,Perl とかで全部書くってのも良いかもね.とりあえず,ぼくのところではちゃんと動いたので,ぼくはこれで良いかなと.

やっぱり将来的には「The Book Project 夜間飛行」側で Kindle へのプッシュに対応してくれるとありがたいなぁ.

http://onohiroki.cycling.jp/tb/tb.cgi/weblog_d20121215n1 TrackBack