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:
- Įtraukiamas konfigūracijos failas su API URL ir raktu.
- Sukuriamas masyvas su numatytaisiais akcijų simboliais.
- Funkcija getConfiguredClient()patikrina, ar sistemoje yra įdiegta curl arba wget programa, reikalinga HTTP užklausoms vykdyti.
- Funkcija httpGet()naudoja šias programas užklausoms atlikti.
- Funkcija checkInternet()patikrina, ar yra interneto ryšys.
- Pagrindinė funkcija printStockInformation()gauna ir išveda akcijų informaciją.
- Jei skriptas paleidžiamas be argumento, funkcija showStockList()pateikia sąrašą akcijų simbolių, iš kurio vartotojas gali pasirinkti.
- 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ą.
#!/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
Rašyti komentarą