Bash skriptas akcijų informacijai gauti

 


Šiandien noriu pasidalinti įdomiu Bash skriptu, kuris naudoja nemokamą API iš https://site.financialmodelingprep.com/ svetainės (iki 250 užklausų per dieną), kurį pats naudoju savo kasdieninės informacijos pateikimo ir sistemos atsarginių kopijų funkcionalume. Šio API tikslas – gauti realaus laiko akcijų informaciją.

Skripto funkcionalumas:

  • Leidžia vartotojui pasirinkti akcijų simbolius, kuriems nori gauti informaciją.
  • Galima paleisti su argumentu, nurodančiu konkretų akcijų simbolį, arba be argumento – tokiu atveju vartotojas gali rinktis akcijas iš pateikto sąrašo.
  • Pateikia tokią informaciją kaip pavadinimą, biržą, naujausią kainą, kainos pokyčius ir kt.

Kaip veikia skriptas:

  1. Įtraukiamas konfigūracijos failas su API URL ir raktu.
  2. Sukuriamas masyvas su numatytaisiais akcijų simboliais.
  3. Funkcija getConfiguredClient() patikrina, ar sistemoje yra įdiegta curl arba wget programa, reikalinga HTTP užklausoms vykdyti.
  4. Funkcija httpGet() naudoja šias programas užklausoms atlikti.
  5. Funkcija checkInternet() patikrina, ar yra interneto ryšys.
  6. Pagrindinė funkcija printStockInformation() gauna ir išveda akcijų informaciją.
  7. Jei skriptas paleidžiamas be argumento, funkcija showStockList() pateikia sąrašą akcijų simbolių, iš kurio vartotojas gali pasirinkti.
  8. Jei nurodytas argumentas, tiesiog išvedama informacija apie tą akciją.

Pasiūlymai patobulinimui:

  • Išskaidyti kodą į atskirus failus ar funkcijas, kad būtų lengviau prižiūrėti ir modifikuoti.
  • Pridėti daugiau patikrinimų ir išimčių valdymą, kad skriptas būtų atsparus klaidoms.
  • Įtraukti papildomų funkcijų, tokių kaip akcijų palyginimas, istorinių duomenų gavimas ar grafinių ataskaitų generavimas.
  • Pagerinti vartotojo sąsają, pavyzdžiui, naudojant meniu sistemos ar interaktyvius pasirinkimus.
  • Pridėti galimybę išsaugoti vartotojo nustatymus arba mėgstamiausius akcijų simbolius.

Nauda:

Šis skriptas gali būti naudingas investuotojams, finansų analitikams ar tiesiog žmonėms, besidomintiems akcijų rinka. Jis leidžia greitai ir patogiai gauti realaus laiko akcijų informaciją.

Apibendrinimas:

Tai puikus pavyzdys, kaip Bash skriptai gali būti naudojami praktiniams tikslams ir sąveikauti su išoriniais šaltiniais, tokiais kaip API. Tikiuosi, kad šis įrašas buvo įdomus ir naudingas, o pateikti patobulinimo pasiūlymai padės tobulinti šio kodo funkcionalumą bei patogumą.

bash
#!/usr/bin/env bash # Įtraukiame konfigūracijos failą, kuriame yra API URL ir raktas. source "$HOME/git/config.sh" # Sukuriame masyvą, kuriame saugomi akcijų simboliai. stocks=("TSLA" "NVDA" "AAPL" "F" "DIS" "META" "PFE" "NIO" "KO") # Funkcija getConfiguredClient() tikrina, ar sistema turi įdiegtą curl arba wget programą, reikalingą HTTP užklausoms. getConfiguredClient() { if command -v curl &>/dev/null; then configuredClient="curl" elif command -v wget &>/dev/null; then configuredClient="wget" else echo "Klaida: curl arba wget turi būti įdiegti." >&2 exit 1 fi } # Funkcija httpGet() vykdo HTTP GET užklausą naudodama nustatytą klientą (curl arba wget). httpGet() { case "$configuredClient" in curl) curl -s "$@" ;; wget) wget -qO- "$@" ;; esac } # Funkcija checkInternet() patikrina, ar yra interneto ryšys, pabandydama pasiekti github.com. checkInternet() { httpGet github.com > /dev/null 2>&1 || { echo "Klaida: nėra interneto ryšio" >&2; exit 1; } } # Funkcija checkJsonField() patikrina, ar JSON laukas nėra null arba tuščias ir grąžina pranešimą. checkJsonField() { fieldValue="$1" if [[ "$fieldValue" == "null" ]] || [[ -z "$fieldValue" ]]; then echo "Nėra duomenų" else echo "$fieldValue" fi } # Funkcija printStockInformation() gauna ir spausdina akcijų informaciją pagal jų simbolį. printStockInformation() { stockSymbol="$1" stockProfile=$(httpGet "$API_URL/profile/$stockSymbol?apikey=$API_KEY") stockQuote=$(httpGet "$API_URL/quote/$stockSymbol?apikey=$API_KEY") # Patikrina, ar atsakymas turi klaidos pranešimą if echo "$stockProfile" | jq -e '.[0]? | has("Error Message")' > /dev/null; then echo "Klaida: $(echo "$stockProfile" | jq -r '.[0].["Error Message"]')" exit 1 fi if [ "$(echo "$stockProfile" | jq -r 'type')" != "array" ] || [ "$(echo "$stockQuote" | jq -r 'type')" != "array" ]; then echo "Klaida: Klaidingas API atsakymas." exit 1 fi # Patikrina, ar masyvas nėra tuščias if [ "$(echo "$stockProfile" | jq '. | length')" -eq 0 ] || [ "$(echo "$stockQuote" | jq '. | length')" -eq 0 ]; then echo "Klaida: API atsakymas tuščias." exit 1 fi name=$(echo "$stockProfile" | jq -r '.[0].companyName' 2>/dev/null || echo "Nėra duomenų") exchangeName=$(echo "$stockProfile" | jq -r '.[0].exchange' 2>/dev/null || echo "Nėra duomenų") latestPrice=$(echo "$stockQuote" | jq -r '.[0].price' 2>/dev/null || echo "Nėra duomenų") range=$(echo "$stockProfile" | jq -r '.[0].range' 2>/dev/null || echo "Nėra duomenų") priceChange=$(echo "$stockQuote" | jq -r '.[0].change' 2>/dev/null || echo "Nėra duomenų") priceChangePercentage=$(echo "$stockQuote" | jq -r '.[0].changesPercentage' 2>/dev/null || echo "Nėra duomenų") volumeAvg=$(echo "$stockProfile" | jq -r '.[0].volAvg' 2>/dev/null || echo "Nėra duomenų") cat <&2 exit 1 ;; esac done # Funkcija checkInternet() patikrina, ar yra interneto ryšys pabandydama pasiekti github.com. checkInternet || exit 1 if [[ $# -eq 1 ]]; then stockSymbol="$1" printStockInformation "$stockSymbol" else while true; do showStockList read -rp "Pasirinkite numerį: " choice if [[ -z "$choice" ]]; then for stock in "${stocks[@]}"; do printStockInformation "$stock" done break elif [[ "$choice" =~ ^[0-9]+$ ]] && (( choice > 0 && choice <= ${#stocks[@]} )); then selectedStock="${stocks[$((choice-1))]}" printStockInformation "$selectedStock" break else echo "Neteisingas pasirinkimas. Bandykite dar kartą." >&2 fi done fi

Komentarai

Populiarūs šio tinklaraščio įrašai

Configuring a NixOS firewall for everyday use

Setting up syncthing as a service on openSUSE and other Linux distributions

Monitoring SFTP server updates with Python