指定したURLをPDFに変換するスクリプトを、以前作った。
指定したURLのタイトルをとってくるスクリプトも、さっき作った。
これを組み合わせて、指定したURL(引数1)をPDFに変換して、「URLの<title>名.pdf」で保存してくれるスクリプトにする。
内部で「wkhtmltopdf」コマンドを使っているので、スクリプト名は頭にmyをつけて mywkhtmltopdf.sh でいいや。
こんな動き。
$ ./mywkhtmltopdf.sh URL名
出力されたファイルを開いてみる。
バッチリpdfになっている。Linuxほんと最高。
ソース
#!/bin/bash
shopt -s expand_aliases
source ~/.bashrc
# 異常時にちゃんと止まるスクリプト
# http://fj.hatenablog.jp/entry/2017/05/20/192431
set -eu -o pipefail
trap 'echo "ERROR: line no = $LINENO, exit status = $? > &2; exit 1' ERR
mydate=`date +"%Y%m%d_%H%M%S"`
mypath=`pwd`
echo $mydate
# http://d.hatena.ne.jp/nattou_curry_2/20091103/1257262803
# Bashを使うなら理解しておきたいアルゴリズム - 抽出・ソート・結合・集計
# 関数
# function multi() { echo "数値を入力"; read ans; for i in $(seq 1 10); do echo "$i"; echo $*1; done; }
##### 処理開始
# pdfにしたいURLを引数でもらう(ARG1)
# スペースや日本語だったらどうするかの対策はいるけどそれは今後
# if $# -lt 2
if [[ $# -lt 1 ]]
then
echo '引数不足 最低1個必要'
echo '======================================================================'
echo "$0 URL 出力ファイル名.pdf"
echo '======================================================================'
exit
fi
# 出力するpdfのファイル名を生成する
# htmlの<head>ここ</head>を捕捉してファイル名にする
# curl -s http://min117.hatenablog.com/entry/2017/07/18/213239 | egrep '.*<title>.*</title>.*' | awk -F\> '{print $2}' | awk -F\< '{print $1}'
# OUT=$(curl -s http://min117.hatenablog.com/entry/2017/07/18/213239 | egrep '.*<title>.*</title>.*' | awk -F\> '{print $2}' | awk -F\< '{print $1}')
OUT1=$(curl -s "$1" | egrep '.*<title>.*</title>.*' | awk -F\> '{print $2}' | awk -F\< '{print $1}')
#出力ファイル名の半角スペースはアンダーバーにする
OUT2=$(echo "$OUT1" | sed -e s/" "/"_"/g)
# 画面に情報出力する
echo '======================================================================'
echo "URL:$1"
echo "OUT:$OUT2".pdf
echo '======================================================================'
# よろしいですか?を聞く
echo "よろしいですか? [y/n]? "
read ans
# 大文字小文字変換 UPPERは${i^^} LOWERは${i,,} ← Linuxでしか使えない/Macのbashではダメ
#echo ${ans,,}
#ans="${ans,,}"
#echo "$ans"
#echo "$ans" | tr "[A-Z]" "[a-z]" # upper to lower
ans=`echo "$ans" | tr "[A-Z]" "[a-z]"` # upper to lower
case "$ans" in
read ans
# 大文字小文字変換 UPPERは${i^^} LOWERは${i,,} ← Linuxでしか使えない/Macのbashではダメ
#echo ${ans,,}
#ans="${ans,,}"
#echo "$ans"
#echo "$ans" | tr "[A-Z]" "[a-z]" # upper to lower
ans=`echo "$ans" | tr "[A-Z]" "[a-z]"` # upper to lower
case "$ans" in
y | yes )
echo "yesです"
# wkhtmltopdf URL 出力ファイル名.pdf
# wkhtmltopdf http://min117.hatenablog.com/entry/2017/07/18/213239
wkhtmltopdf "$1" "$OUT2"
;;
n | no )
echo "noです" ;;
esac
case文は久しぶりに使った。末尾の ;; いつも忘れるなぁ。
改良版)
*1:ans*i