95 lines
2.9 KiB
Bash
Executable File
95 lines
2.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -e
|
|
|
|
LANG=C
|
|
LC_NUMERIC=C
|
|
|
|
SYMBOLS=("$@")
|
|
|
|
if ! $(type jq > /dev/null 2>&1); then
|
|
echo "'jq' is not in the PATH. (See: https://stedolan.github.io/jq/)"
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "$SYMBOLS" ]; then
|
|
echo "Usage: ./ticker.sh AAPL MSFT GOOG BTC-USD"
|
|
exit
|
|
fi
|
|
|
|
FIELDS=(symbol marketState regularMarketPrice regularMarketChange regularMarketChangePercent regularMarketVolume regularMarketPreviousClose \
|
|
preMarketPrice preMarketChange preMarketChangePercent postMarketPrice postMarketChange postMarketChangePercent \
|
|
shortName longName fullExchangeName)
|
|
#API_ENDPOINT="https://query1.finance.yahoo.com/v7/finance/quote?lang=en-US®ion=US&corsDomain=finance.yahoo.com"
|
|
API_ENDPOINT="https://query1.finance.yahoo.com/v7/finance/quote?lang=fr-FR®ion=FR&corsDomain=finance.yahoo.com"
|
|
|
|
if [ -z "$NO_COLOR" ]; then
|
|
: "${COLOR_BOLD:=\e[1;37m}"
|
|
: "${COLOR_GREEN:=\e[32m}"
|
|
: "${COLOR_RED:=\e[31m}"
|
|
: "${COLOR_RESET:=\e[00m}"
|
|
fi
|
|
|
|
symbols=$(IFS=,; echo "${SYMBOLS[*]}")
|
|
echo "$symbols"
|
|
|
|
fields=$(IFS=,; echo "${FIELDS[*]}")
|
|
|
|
results=$(curl --silent "$API_ENDPOINT&fields=$fields&symbols=$symbols" | jq '.quoteResponse .result')
|
|
#echo "$results"
|
|
|
|
query () {
|
|
echo $results | jq -r ".[] | select(.symbol == \"$1\") | .$2"
|
|
}
|
|
|
|
for symbol in $(IFS=' '; echo "${SYMBOLS[*]}" | tr '[:lower:]' '[:upper:]'); do
|
|
marketState="$(query $symbol 'marketState')"
|
|
|
|
if [ -z $marketState ]; then
|
|
printf 'No results for symbol "%s"\n' $symbol
|
|
continue
|
|
fi
|
|
|
|
preMarketChange="$(query $symbol 'preMarketChange')"
|
|
postMarketChange="$(query $symbol 'postMarketChange')"
|
|
|
|
longName="$(query $symbol 'longName')"
|
|
#regularMarketPreviousClose="$(query $symbol 'regularMarketPreviousClose')"
|
|
|
|
if [ $marketState == "PRE" ] \
|
|
&& [ $preMarketChange != "0" ] \
|
|
&& [ $preMarketChange != "null" ]; then
|
|
nonRegularMarketSign='*'
|
|
price=$(query $symbol 'preMarketPrice')
|
|
diff=$preMarketChange
|
|
percent=$(query $symbol 'preMarketChangePercent')
|
|
elif [ $marketState != "REGULAR" ] \
|
|
&& [ $postMarketChange != "0" ] \
|
|
&& [ $postMarketChange != "null" ]; then
|
|
nonRegularMarketSign='*'
|
|
price=$(query $symbol 'postMarketPrice')
|
|
diff=$postMarketChange
|
|
percent=$(query $symbol 'postMarketChangePercent')
|
|
else
|
|
nonRegularMarketSign=''
|
|
price=$(query $symbol 'regularMarketPrice')
|
|
diff=$(query $symbol 'regularMarketChange')
|
|
percent=$(query $symbol 'regularMarketChangePercent')
|
|
previous=$(query $symbol 'regularMarketPreviousClose')
|
|
fi
|
|
|
|
if [ "$diff" == "0" ] || [ "$diff" == "0.0" ]; then
|
|
color=
|
|
elif ( echo "$diff" | grep -q ^- ); then
|
|
color=$COLOR_RED
|
|
else
|
|
color=$COLOR_GREEN
|
|
fi
|
|
|
|
if [ "$price" != "null" ]; then
|
|
#printf "%-10s$COLOR_BOLD%8.2f$COLOR_RESET" $symbol $price
|
|
printf "%-10s%-35s$COLOR_BOLD%8.2f$COLOR_RESET" $symbol "$longName" $price
|
|
printf "$color%10.2f%12s$COLOR_RESET%+10s" $diff $(printf "(%.2f%%)" $percent) $previous
|
|
printf " %s\n" "$nonRegularMarketSign"
|
|
fi
|
|
done
|