84 lines
2.7 KiB
Go
84 lines
2.7 KiB
Go
|
package staticjsonYahooFinance
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"net/url"
|
||
|
)
|
||
|
|
||
|
type chart struct {
|
||
|
Chart struct {
|
||
|
Result []struct {
|
||
|
Meta struct {
|
||
|
Currency string `json:"currency"`
|
||
|
Symbol string `json:"symbol"`
|
||
|
ExchangeName string `json:"exchangeName"`
|
||
|
InstrumentType string `json:"instrumentType"`
|
||
|
FirstTradeDate int `json:"firstTradeDate"`
|
||
|
RegularMarketTime int `json:"regularMarketTime"`
|
||
|
Gmtoffset int `json:"gmtoffset"`
|
||
|
Timezone string `json:"timezone"`
|
||
|
ExchangeTimezoneName string `json:"exchangeTimezoneName"`
|
||
|
RegularMarketPrice float64 `json:"regularMarketPrice"`
|
||
|
ChartPreviousClose float64 `json:"chartPreviousClose"`
|
||
|
PreviousClose float64 `json:"previousClose"`
|
||
|
Scale int `json:"scale"`
|
||
|
PriceHint int `json:"priceHint"`
|
||
|
CurrentTradingPeriod struct {
|
||
|
Pre struct {
|
||
|
Timezone string `json:"timezone"`
|
||
|
Start int `json:"start"`
|
||
|
End int `json:"end"`
|
||
|
Gmtoffset int `json:"gmtoffset"`
|
||
|
} `json:"pre"`
|
||
|
Regular struct {
|
||
|
Timezone string `json:"timezone"`
|
||
|
Start int `json:"start"`
|
||
|
End int `json:"end"`
|
||
|
Gmtoffset int `json:"gmtoffset"`
|
||
|
} `json:"regular"`
|
||
|
Post struct {
|
||
|
Timezone string `json:"timezone"`
|
||
|
Start int `json:"start"`
|
||
|
End int `json:"end"`
|
||
|
Gmtoffset int `json:"gmtoffset"`
|
||
|
} `json:"post"`
|
||
|
} `json:"currentTradingPeriod"`
|
||
|
TradingPeriods [][]struct {
|
||
|
Timezone string `json:"timezone"`
|
||
|
Start int `json:"start"`
|
||
|
End int `json:"end"`
|
||
|
Gmtoffset int `json:"gmtoffset"`
|
||
|
} `json:"tradingPeriods"`
|
||
|
DataGranularity string `json:"dataGranularity"`
|
||
|
Range string `json:"range"`
|
||
|
ValidRanges []string `json:"validRanges"`
|
||
|
} `json:"meta"`
|
||
|
Timestamp []int `json:"timestamp"`
|
||
|
Indicators struct {
|
||
|
Quote []struct {
|
||
|
Volume []any `json:"volume"`
|
||
|
High []any `json:"high"`
|
||
|
Close []any `json:"close"`
|
||
|
Open []any `json:"open"`
|
||
|
Low []any `json:"low"`
|
||
|
} `json:"quote"`
|
||
|
} `json:"indicators"`
|
||
|
} `json:"result"`
|
||
|
Error any `json:"error"`
|
||
|
} `json:"chart"`
|
||
|
}
|
||
|
|
||
|
func (c client) getChart(symbol string) (int, error) {
|
||
|
chartResponse := &chart{}
|
||
|
err := c.get(fmt.Sprintf("/chart/%s", symbol), chartResponse, url.Values{})
|
||
|
if err != nil {
|
||
|
return 0, fmt.Errorf("http get request error: %v", err)
|
||
|
}
|
||
|
|
||
|
if len(chartResponse.Chart.Result) != 1 {
|
||
|
return 0, fmt.Errorf("unexpected length of results - expected 1 but got %d", len(chartResponse.Chart.Result))
|
||
|
}
|
||
|
|
||
|
return int(chartResponse.Chart.Result[0].Meta.RegularMarketPrice * 1000), nil
|
||
|
}
|