diff options
author | Patrick Stadler <patrick.stadler@gmail.com> | 2023-05-31 13:32:50 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-31 13:32:50 +0200 |
commit | af3d8843390c5131a3d59fcb8cf42b9ed7cc07eb (patch) | |
tree | a1fc86792b11e7366ed9237463a1e14dddda9e05 | |
parent | 127cfb99164ba4007affc1314dbf78723f949986 (diff) |
Acquire yahoo finance session (#39)
* acquire yahoo finance session (fixes #33)
* make temp dir creation work cross platform
-rw-r--r-- | README.md | 2 | ||||
-rwxr-xr-x | ticker.sh | 30 |
2 files changed, 29 insertions, 3 deletions
@@ -42,6 +42,8 @@ $ watch -n 5 -t -c ./ticker.sh AAPL MSFT GOOG BTC-USD $ while true; do clear; ./ticker.sh AAPL MSFT GOOG BTC-USD; sleep 5; done ``` +Please note that ticker.sh may require periodic updates of its session with Yahoo Finance. During these instances, the script may take slightly longer to complete. + This script works well with [GeekTool](https://www.tynsoe.org/geektool/) and similar software: ```sh @@ -4,6 +4,11 @@ set -e LANG=C LC_NUMERIC=C +: ${TMPDIR:=/tmp} +SESSION_DIR="${TMPDIR%/}/ticker.sh-$(whoami)" +COOKIE_FILE="${SESSION_DIR}/cookies.txt" +CRUMB_FILE="${SESSION_DIR}/crumb.txt" + SYMBOLS=("$@") if ! $(type jq > /dev/null 2>&1); then @@ -30,8 +35,27 @@ fi symbols=$(IFS=,; echo "${SYMBOLS[*]}") fields=$(IFS=,; echo "${FIELDS[*]}") -results=$(curl --silent "$API_ENDPOINT&fields=$fields&symbols=$symbols" \ - | jq '.quoteResponse .result') +[ ! -d "$SESSION_DIR" ] && mkdir -m 700 "$SESSION_DIR" + +preflight () { + curl --silent --output /dev/null --cookie-jar "$COOKIE_FILE" "https://finance.yahoo.com" \ + -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8" + curl --silent -b "$COOKIE_FILE" "https://query1.finance.yahoo.com/v1/test/getcrumb" \ + > "$CRUMB_FILE" +} + +fetch_quotes () { + curl --silent -b "$COOKIE_FILE" "$API_ENDPOINT&fields=$fields&symbols=$symbols&crumb=$(cat "$CRUMB_FILE")" +} + +[ ! -f "$COOKIE_FILE" -o ! -f "$CRUMB_FILE" ] && preflight +results=$(fetch_quotes) +if $(echo "$results" | grep -q '"code":"Unauthorized"'); then + preflight + results=$(fetch_quotes) +fi + +results=$(echo $results | jq '.quoteResponse .result') query () { echo $results | jq -r ".[] | select(.symbol == \"$1\") | .$2" @@ -82,4 +106,4 @@ for symbol in $(IFS=' '; echo "${SYMBOLS[*]}" | tr '[:lower:]' '[:upper:]'); do printf "$color%10.2f%12s$COLOR_RESET" $diff $(printf "(%.2f%%)" $percent) printf " %s\n" "$nonRegularMarketSign" fi -done +done
\ No newline at end of file |