min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

bash はてなブログの全記事を自動でPDFにするスクリプト

ブログ記事数もそこそこ増えてきたけど今まで一度もバックアップを取っていないWebサービスなんてしょせん他人のフンドシ(提供する場所)上で作っているものなので、例えばはてなブログが倒産したり、突然ブログサービスをやめたら全て消えてしまう

 

信じられるのは自分のローカル。手元にあるハードディスク。結局はここに落ち着く。はてなブログで書いた記事もPDFにして自分の手元に置いておくことにした。

 

かといって、600以上もある記事を一つ一つブラウザで開いてPDF変換なんてやってられない。自動化する。bashを使ってはてなブログの記事を全てコマンド一発でPDFにすることを考える。

 

完成イメージはこんな感じ。

元記事

f:id:min117:20181019000549p:plain

コマンド実行

$ wkhtmltopdf "http://ブログURL" 出力ファイル名.pdf

f:id:min117:20181019001237p:plain

PDF変換後

f:id:min117:20181019000733p:plain

若干フォントは変わってしまうが、読む分にはまったく問題ない。


 

<環境>

fedora Linux 20(CentOSとほとんど同じ)

wkhtmltopdf をインストールして使う

 

<参考>

この記事そのまま進める。

qiita.com

 

 

 

<インストール>

まずは、前提になる環境アプリ( libXrender libXext)をインストール。

$ sudo yum -y install libXrender libXext

f:id:min117:20181019000148p:plain

f:id:min117:20181019000158p:plain

 

変換アプリ本体(wkhtmltox)をダウンロードする。

$ wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz

f:id:min117:20181019000258p:plain

f:id:min117:20181019000310p:plain

 

$ tar Jxfv wkhtmltox-0.12.4_linux-generic-amd64.tar.xz

f:id:min117:20181019000325p:plain

 

$ sudo cp wkhtmltox/bin/wkhtmltoimage /usr/local/bin/

$ sudo cp wkhtmltox/bin/wkhtmltopdf /usr/local/bin/

$ ls -shal /usr/local/bin | grep wkhtmlto

f:id:min117:20181019000334p:plain

 

インストールされたかとバージョンを確認。

$ wkhtmltoimage --version

wkhtmltopdf --version

f:id:min117:20181019000412p:plain

 

PDF変換をテストしてみる。

$ wkhtmltopdf "

http://min117.hatenablog.com/entry/2017/11/18/112741" my_pdf_test_001.pdf

f:id:min117:20181019001237p:plain

完璧。数秒でできた。

 

ここまででコマンド一発でURLからpdfを作成する環境は完成。あとは、pdfにしたいURLを一覧にしたテキストファイル(my_blog_URL.txt)を作って、それをbashループで回してwkhtmltopdfコマンド引数にして食わせてやればよい

 

テキストファイルはこれ。

$ vim my_blog_URL.txt

f:id:min117:20181019003448p:plain

試しに5記事分のリンクだけ書いてみる。

f:id:min117:20181019003454p:plain

 

これを bashのforループで回してコマンドに食わせてやる

 

まずはfor文でテキストを表示(cat)するテスト。

$ for i in `cat my_blog_URL.txt`; do echo "$i"; done

f:id:min117:20181019004925p:plain

うまく読めている。

 

次に出力ファイル名を決める。読み取ったURLの最後の6文字で一意になりそうなのでこれをファイル名にするawkで切り出す。区切り(フィールドセパレータ -F)はスラッシュなので、-F指定するときにエスケープしてやる

$ for i in `cat my_blog_URL.txt`; do echo "$i"; echo "$i" | awk -F¥/ '{print $8}'; done

f:id:min117:20181019005234p:plain

うまく切り出せている。

 

ここまでくればあとは wkhtmltopdf に食わせてやるだけ。

$ for i in `cat my_blog_URL.txt`; do echo "$i"; echo "$i" | awk -F¥/ '{print $8}'; wkhtmltopdf "$i" `echo "$i" | awk -F¥/ '{print $8}'.pdf; done

f:id:min117:20181019005524p:plain

一気にpdf化が進む。

f:id:min117:20181019005724p:plain

あれ。何かエラーが出た。記事が大きすぎるか、写真がデカかったかな?

f:id:min117:20181019010015p:plain

まあ、変換自体は完了したっぽい。

 

$ ls -shal | grep pdf$

f:id:min117:20181019005843p:plain

無事変換できている。開いてみる。

f:id:min117:20181019010355p:plain

カンペキ。これだからLinuxは最高。

 

今回は5記事分だけだったが、今後はてなブログ記事のURLを一括で取得してテキストファイルに落とす方法を探せば、完全自動化になる。そこは後日。