Script update harga saham (indo), reksadana, dan kripto
Saya iseng mengumpulkan beberapa API gratis dari internet untuk menyusun script update harga komoditas di journal hledger saya. Berikut scriptnya, sedottt gan hehe
```bash
#!/bin/bash
kontan_reksadana_cache=$(mktemp)
cleanup() {
rm -f "$kontan_reksadana_cache"
}
trap cleanup EXIT
process_price() {
local price=$1
if [[ $price =~ ^[0-9]+(\.[0-9]+)?$ ]]; then
echo "$price"
else
echo "Invalid price: $price" >&2
return 1
fi
}
print_price() {
local symbol=$1 base=$2
shift 2
local price
price=$("$@") || return
echo P "$today $symbol $price $base"
}
ipot_stock_price() {
local today last_week stock_code url close_price
today=$(date +"%m/%d/%Y")
last_week=$(date -d "30 days ago" +"%m/%d/%Y")
stock_code=$1
url="https://www.indopremier.com/module/saham/include/json-charting.php?code=$stock_code&start=$last_week&end=$today"
until close_price=$(curl -s "$url" | jq '.[length -1][4]'); do
sleep 1
done
process_price "$close_price"
} 2>/dev/null
kontan_reksadana_price() {
local mf_name price
mf_name=$1
if ! grep -q "recordsTotal" "$kontan_reksadana_cache"; then
curl -s -X POST "https://pusatdata.kontan.co.id/reksadana/list/" -o "$kontan_reksadana_cache"
fi
price=$(jq -r ".data[] | select(.[0] == \"$mf_name\")[2]" "$kontan_reksadana_cache")
process_price "$price"
} 2>/dev/null
cryptocompare_price() {
local fsym tsym url price
fsym=$1
tsym=$2
url="https://min-api.cryptocompare.com/data/price?fsym=$fsym&tsyms=$tsym"
until price=$(curl -s "$url" | jq -r ".$tsym"); do
sleep 1
done
process_price "$price"
} 2>/dev/null
today=$(date +"%Y-%m-%d")
for stock in BBCA BBNI BMRI BBRI BMTR EXCL GOTO TLKM ANTM ADRO NICL; do
print_price "$stock" IDR ipot_stock_price "$stock"
done
curl -s -X POST "https://pusatdata.kontan.co.id/reksadana/list/" >/dev/null 2>&1
mf_names=("KISI_FI| KISI FIXED INCOME FUND" "I_SRILIKUID|Insight Sri Kehati Likuid" "TRIM_DTSYA|TRIMEGAH DANA TETAP SYARIAH KELAS A" "CAPITAL_FI|Capital Fixed Income Fund")
for mf in "${mf_names[@]}"; do
symbol=${mf%|*}
name=${mf#*|}
print_price "$symbol" IDR kontan_reksadana_price "$name"
done
print_price USDT IDR ipot_stock_price "USD-IDR"
print_price XMR USDT cryptocompare_price "XMR" "USD"
print_price BTC USDT cryptocompare_price "BTC" "USD"
for currency in EUR SGD JPY USD CNY; do
print_price "$currency" IDR ipot_stock_price "$currency-IDR"
done
```
Created: 2024-10-03 10:37:41, Updated: 2026-06-02 03:36:48, ID: fc35ee2c-78ed-4b2a-b17f-b1849477779c