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ą