Skip to content

Instantly share code, notes, and snippets.

@akanehara
Last active April 5, 2020 09:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save akanehara/566836dfc331d895b726e0cac9449c22 to your computer and use it in GitHub Desktop.
Save akanehara/566836dfc331d895b726e0cac9449c22 to your computer and use it in GitHub Desktop.
https://code-for-philly.gitbook.io/chime/ の更新差分確認スクリプト

Usage: code-for-philly.bash

https://code-for-philly.gitbook.io/chime/ をダウンロードし, 過去のダウンロード分があれば Gitbook JSON の変更有無を比較します. もしも変更があった場合は日付ディレクトリに保存され,変更差分を確認するための diff コマンドラインを stdout に出力します.

stdout に出力された内容は code-for-philly.bash.log にも保存されます.

注意: ログや日付ディレクトリはカレントディレクトリ下に作成されます!

code-for-philly.bash.log の出力例

2020-04-05_18:04:58 First download.
2020-04-05_18:09:56 は 2020-04-05_17:57:32 から変更されています. 下記コマンドでファイル毎の差分を確認できます.
diff -r 2020-04-05_17:57:32/json/chime/what-is-chime/dashboard-outputs-descriptions 2020-04-05_18:09:56/json/chime/what-is-chime/dashboard-outputs-descriptions
diff -r 2020-04-05_17:57:32/json/chime/app-partners 2020-04-05_18:09:56/json/chime/app-partners
diff -r 2020-04-05_17:57:32/json/chime/open-source/making-your-own-chime-app/building-the-app-locally 2020-04-05_18:09:56/json/chime/open-source/making-your-own-chime-app/building-the-app-locally
2020-04-05_18:11:27 は 2020-04-05_18:09:56 から変更されています. 下記コマンドでファイル毎の差分を確認できます.
diff -r 2020-04-05_18:09:56/json/chime/what-is-chime/dashboard-outputs-descriptions 2020-04-05_18:11:27/json/chime/what-is-chime/dashboard-outputs-descriptions
2020-04-05_18:13:53 は 2020-04-05_18:11:27 から変更がありません.
2020-04-05_18:14:11 は 2020-04-05_18:11:27 から変更がありません.
#!/bin/bash
URL="https://code-for-philly.gitbook.io/chime/"
SCRIPT="$(basename $0)"
LOG="${SCRIPT}.log"
help()
{
cat <<HELP
Usage: ${SCRIPT}
${URL} をダウンロードし, 過去のダウンロードあれば Gitbook JSON の変更有無を比較します.
もしも変更があった場合は,日付ディレクトリで保存され,差分を確認するための diff コマンドラインを stdout に出力します.
stdout に出力された内容は ${LOG} にも保存されます.
注意: ログや日付ディレクトリはカレントディレクトリ下に作成します.
HELP
}
while getopts h OPT
do
case "${OPT}" in
h)
help
exit 0
;;
esac
done
shift "$(( ${OPTIND} - 1))"
extract_gitbook_json()
{
# code-for-philly.gitbook.io ディレクトリと同構造でGitbook JSONのみを含むディレクトリを作る
if [ ! -e "code-for-philly.gitbook.io" ]; then
"code-for-philly.gitbook.io ディレクトリが見つからないため, 中断します."
return 1
fi
find "code-for-philly.gitbook.io" -type f |
sed -E 's/([^\/]*)(.*\/)(.*)$/\1 \2 \3/' |
while read BASE DIR FILENAME
do
IN="${BASE}${DIR}${FILENAME}"
OUT="json${DIR}${FILENAME}"
mkdir -p "$(dirname "${OUT}")"
if grep -F -e 'window.GITBOOK_STATE =' "${IN}" > gitbook_json_line; then
sed -E -e 's/ *window\.GITBOOK_STATE =(.*);$/\1/' gitbook_json_line | jq . > "${OUT}"
fi
rm -f gitbook_json_line
done
}
# 前回ダウンロードディレクトリ
LATEST="$(
ls |
sed -n -e '/^[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}_[0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}$/p'|
sort -r |
head -n1
)"
# 対象URLを起点にダウンロード(ホスト内限定, 再帰カウント無制限)
NOW="$(date +%F_%T)"
echo Downloading "${URL}"
wget --recursive --level=inf -P "${NOW}" "${URL}" >> wget.out 2>&1
WGET_EXIT=$?
if [ 0 -ne ${WGET_EXIT} ]; then
rm -rf "${NOW}"
echo "${URL} のダウンロードに失敗しました. wget の終了コード: ${WGET_EXIT}" | tee -a "${LOG}"
exit 1
fi
# 同じディレクトリ構造で Gitbook JSON を抽出
if ! ( cd "${NOW}"; extract_gitbook_json ); then
exit 1
fi
# 今回ダウンロード分と直前ダウンロード分を Gitbook JSONの内容で比較し、差異がなければ削除
if [ -n "${LATEST}" ]
then
# 過去ダウンロードあり
diff -r "${LATEST}/json" "${NOW}/json" > latest.diff
if [ $? -eq 0 ]
then
# 変更なし
echo "${NOW} は ${LATEST} から変更がありません." | tee -a "${LOG}"
rm -f -r "${NOW}"
exit 0
else
# 変更あり
echo "${NOW} は ${LATEST} から変更されています. 下記コマンドでファイル毎の差分を確認できます." | tee -a "${LOG}"
grep -e '^diff ' latest.diff | tee -a "${LOG}"
exit 1
fi
else
# 初回ダウンロード
echo "${NOW} First download." | tee -a "${LOG}"
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment