143 lines
3.4 KiB
Bash
143 lines
3.4 KiB
Bash
#!/bin/sh
|
|
#
|
|
# fetch_fio.sh
|
|
#
|
|
# Fio API account statements fetcher.
|
|
#
|
|
# ISC License
|
|
#
|
|
# Copyright 2023 Brmlab, z.s.
|
|
# Jan Hrach
|
|
# Dominik Pantůček <dominik.pantucek@trustica.cz>
|
|
#
|
|
# Permission to use, copy, modify, and/or distribute this software
|
|
# for any purpose with or without fee is hereby granted, provided
|
|
# that the above copyright notice and this permission notice appear
|
|
# in all copies.
|
|
#
|
|
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
|
# WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
|
# WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
|
# AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
|
|
# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
|
# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
|
# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
|
# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
#
|
|
|
|
# REST API endpoint
|
|
APIURI=https://www.fio.cz/ib_api/rest
|
|
|
|
# Configuration defaults - none
|
|
CONFIG_FILE=/etc/hackerbase
|
|
CFG_BANK_DIR=
|
|
CFG_APIKEYS_FILE=
|
|
ARG_BANK_DIR=
|
|
ARG_APIKEYS_FILE=
|
|
|
|
# Argument parsing
|
|
while ! [ -z "$1" ] ; do
|
|
case "$1" in
|
|
-apikey)
|
|
ARG_APIKEYS_FILE="$2"
|
|
shift
|
|
shift
|
|
;;
|
|
-bankdir)
|
|
ARG_BANK_DIR="$2"
|
|
shift
|
|
shift
|
|
;;
|
|
-config)
|
|
CONFIG_FILE="$2"
|
|
shift
|
|
shift
|
|
;;
|
|
*)
|
|
echo "Usage: $0 [-config file] [-apikey file] [-bankdir dir]"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Configuration parsing - assumes "dumb" sed which cannot execute
|
|
# multiple statements
|
|
get_config_value() {
|
|
if [ -z "$1" ] ; then
|
|
echo "get_config_value() requires parameter name"
|
|
exit 1
|
|
fi
|
|
cat "$CONFIG_FILE" \
|
|
| sed 's/#.*//' \
|
|
| sed 's/^[ \t]*//' \
|
|
| grep "^$1" \
|
|
| sed 's/^[^ \t]*//' \
|
|
| sed 's/^[ \t]*//' \
|
|
| sed 's/[ \t]*$//'
|
|
}
|
|
CFG_BANK_DIR=`get_config_value bank-dir`
|
|
CFG_APIKEYS_FILE=`get_config_value apikeys-file`
|
|
|
|
# Configuration merging
|
|
if [ -z "$ARG_BANK_DIR" ] ; then
|
|
BANK_DIR="$CFG_BANK_DIR"
|
|
else
|
|
BANK_DIR="$ARG_BANK_DIR"
|
|
fi
|
|
if [ -z "$ARG_APIKEYS_FILE" ] ; then
|
|
APIKEYS_FILE="$CFG_APIKEYS_FILE"
|
|
else
|
|
APIKEYS_FILE="$ARG_APIKEYS_FILE"
|
|
fi
|
|
echo CONFIG_FILE "$CONFIG_FILE"
|
|
echo CFG_BANK_DIR "$CFG_BANK_DIR"
|
|
echo CFG_APIKEYS_FILE "$CFG_APIKEYS_FILE"
|
|
echo ARG_BANK_DIR "$ARG_BANK_DIR"
|
|
echo ARG_APIKEYS_FILE "$ARG_APIKEYS_FILE"
|
|
echo BANK_DIR "$BANK_DIR"
|
|
echo APIKEYS_FILE "$APIKEYS_FILE"
|
|
|
|
#
|
|
# Very simple "logging" function (stdout should be redirected to log anyway)
|
|
log() {
|
|
echo `date '+%Y-%m-%d %H:%M:%S'` $@
|
|
}
|
|
|
|
# Mark
|
|
log $0 ======== started ========
|
|
|
|
# Each line should contain account number and Fio API token as first
|
|
# two non-whitespace strings. The rest of each line is ignored. There
|
|
# must be no leading whitespace.
|
|
while read accnt; do
|
|
# Extract account number and Fio token
|
|
ACCNO=${accnt%% *}
|
|
accrest=${accnt#* }
|
|
APIKEY=${accrest%% *}
|
|
|
|
# Log action
|
|
log "Processing account $ACCNO"
|
|
|
|
# Fetch CSV from bank
|
|
CSVNAME="$BANK_DIR/$ACCNO.csv"
|
|
for i in `seq 1 3` ; do
|
|
if wget -q $APIURI/periods/${APIKEY}/2015-01-01/2025-01-31/transactions.csv -O $CSVNAME.tmp ; then
|
|
if [ -s $CSVNAME.tmp ] ; then
|
|
log Download OK
|
|
cp $CSVNAME $CSVNAME.old
|
|
mv $CSVNAME.tmp $CSVNAME
|
|
log Finished
|
|
break
|
|
else
|
|
log Download successfull but empty or non-existing result.
|
|
log Retrying in 5 s.
|
|
fi
|
|
else
|
|
log Failed download, retrying in 5 s.
|
|
sleep 5
|
|
fi
|
|
done
|
|
done < $APIKEYS_FILE
|
|
|
|
# Mark
|
|
log $0 finished
|