71 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/sh
 | 
						|
 | 
						|
# Settings
 | 
						|
CSV_URL="https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv"
 | 
						|
 | 
						|
# Constants
 | 
						|
EXIT_SUCCESS=0
 | 
						|
EXIT_FAILURE=1
 | 
						|
 | 
						|
# Verify the required runtime environment
 | 
						|
verify_command() {
 | 
						|
  if ! command -v $1 >/dev/null; then
 | 
						|
    echo "This script requires \"$1\" to be installed. Please install it and try again."
 | 
						|
    exit $EXIT_FAILURE
 | 
						|
  fi
 | 
						|
}
 | 
						|
 | 
						|
verify_command "curl"
 | 
						|
verify_command "nkf"
 | 
						|
verify_command "awk"
 | 
						|
 | 
						|
# Logging
 | 
						|
CURRENT_MONTH=$(date "+%Yw%U%z")
 | 
						|
SCRIPT_NAME=$(basename $0)
 | 
						|
LOG_DIR="log"
 | 
						|
LOG_FILE="$LOG_DIR/$SCRIPT_NAME_$CURRENT_MONTH"
 | 
						|
 | 
						|
get_current_time() {
 | 
						|
  date "+%Y-%m-%d %H:%M:%S%z"
 | 
						|
}
 | 
						|
 | 
						|
log() {
 | 
						|
  local timestamp=$(get_current_time)
 | 
						|
  local message=$1
 | 
						|
  echo "$timestamp $message" >>$LOG_FILE
 | 
						|
}
 | 
						|
 | 
						|
# Acquire the lock or exit
 | 
						|
LOCK_DIR="lock"
 | 
						|
if ! mkdir "$LOCK_DIR" 2>/dev/null; then
 | 
						|
  echo "Another process is holding the lock. Exiting."
 | 
						|
  exit $EXIT_FAILURE
 | 
						|
fi
 | 
						|
 | 
						|
mkdir -p $LOG_DIR
 | 
						|
 | 
						|
# Internal configuration settings
 | 
						|
TMP_CSV_FILE="holidays-jp-tmp.csv"
 | 
						|
RAW_CSV_FILE="holidays-jp-raw.csv"
 | 
						|
ALL_CSV_FILE="holidays-jp-all.csv"
 | 
						|
CSV_FILE="holidays-jp.csv"
 | 
						|
 | 
						|
# Run
 | 
						|
curl -sS -L -o $TMP_CSV_FILE $CSV_URL
 | 
						|
if ! diff -q $RAW_CSV_FILE $TMP_CSV_FILE >/dev/null 2>&1; then
 | 
						|
  mv $TMP_CSV_FILE $RAW_CSV_FILE
 | 
						|
  nkf -w $RAW_CSV_FILE >$ALL_CSV_FILE
 | 
						|
  current_year=$(date +'%Y')
 | 
						|
  tail -n +2 $ALL_CSV_FILE | awk -v cy="$current_year" -F'/' '{ if ($1 >= cy) print }' >$CSV_FILE
 | 
						|
  log "Changed"
 | 
						|
else
 | 
						|
  log "No Change"
 | 
						|
  rm $TMP_CSV_FILE
 | 
						|
fi
 | 
						|
 | 
						|
# Release the lock
 | 
						|
rmdir "$LOCK_DIR"
 | 
						|
 | 
						|
# Exit
 | 
						|
exit $EXIT_SUCCESS
 |