Improved error handling: Skips stock instead of panicing when API fails
This commit is contained in:
24
main.go
24
main.go
@@ -2,6 +2,7 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
"flag"
|
"flag"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
@@ -13,7 +14,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
apiToken := flag.String("a", "demo", "World Trading Data API Token")
|
apiToken := flag.String("a", "demo", "World Trading Data API Token")
|
||||||
ledgerBinary := flag.String("b", "ledger", "Ledger Binary")
|
ledgerBinary := flag.String("b", "ledger", "Ledger Binary")
|
||||||
ledgerFile := flag.String("f", "ledger.ledger", "Ledger File")
|
ledgerFile := flag.String("f", "ledger.ledger", "Ledger File")
|
||||||
priceDbFile := flag.String("p", "prices.db", "Price Database File")
|
priceDbFile := flag.String("p", "prices.db", "Price Database File")
|
||||||
@@ -30,6 +31,7 @@ func main() {
|
|||||||
for _, c := range commodities {
|
for _, c := range commodities {
|
||||||
priceString, err := GetPriceString(c, *apiToken)
|
priceString, err := GetPriceString(c, *apiToken)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
log.Println("Skipped " + c)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
pricedb.WriteString("P " + GetTimeString() + " " + c + " " + priceString + "\n")
|
pricedb.WriteString("P " + GetTimeString() + " " + c + " " + priceString + "\n")
|
||||||
@@ -50,13 +52,25 @@ func GetPriceString(ticker string, apiToken string) (string, error) {
|
|||||||
|
|
||||||
var f interface{}
|
var f interface{}
|
||||||
json.Unmarshal(body, &f)
|
json.Unmarshal(body, &f)
|
||||||
m := f.(map[string]interface{})
|
m, ok := f.(map[string]interface{})
|
||||||
|
if !ok {
|
||||||
|
return "", errors.New("Conversion Error")
|
||||||
|
}
|
||||||
dataInterface := m["data"]
|
dataInterface := m["data"]
|
||||||
arr := dataInterface.([]interface{})
|
arr, ok := dataInterface.([]interface{})
|
||||||
|
if !ok {
|
||||||
|
return "", errors.New("Conversion Error")
|
||||||
|
}
|
||||||
elem := arr[0]
|
elem := arr[0]
|
||||||
ma := elem.(map[string]interface{})
|
ma, ok := elem.(map[string]interface{})
|
||||||
|
if !ok {
|
||||||
|
return "", errors.New("Conversion Error")
|
||||||
|
}
|
||||||
priceInterface := ma["price"]
|
priceInterface := ma["price"]
|
||||||
price := priceInterface.(string)
|
price, ok := priceInterface.(string)
|
||||||
|
if !ok {
|
||||||
|
return "", errors.New("Conversion Error")
|
||||||
|
}
|
||||||
return "$" + price, nil
|
return "$" + price, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user