min117の日記

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

bash はてなブログのURLを指定したら「タイトル名.pdf」に出力するスクリプト

指定したURLをPDFに変換するスクリプトを、以前作った。

min117.hatenablog.com

 

指定したURLのタイトルをとってくるスクリプトも、さっき作った。

min117.hatenablog.com

 

これを組み合わせて、指定したURL(引数1)をPDFに変換て、「URLの<title>名.pdf」で保存してくれるスクリプトにする。

 

内部で「wkhtmltopdf」コマンドを使っているので、スクリプト名は頭にmyをつけて mywkhtmltopdf.sh でいいや。

 

こんな動き。

$ ./mywkhtmltopdf.sh URL名

f:id:min117:20181205051611p:plain

f:id:min117:20181205051505p:plain

 

出力されたファイルを開いてみる。

f:id:min117:20181205053927p:plain

 

バッチリpdfになっている。Linuxほんと最高。

f:id:min117:20181205054007p:plain

 

ソース 

#!/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でしか使えない/Macbashではダメ

#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でしか使えない/Macbashではダメ

#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文は久しぶりに使った。末尾の ;; いつも忘れるなぁ。

 

改良版)

min117.hatenablog.com

 

*1:ans*i