85 lines
2.8 KiB
Go
85 lines
2.8 KiB
Go
package staticjsonYahooFinance
|
|
|
|
import (
|
|
"fmt"
|
|
"net/url"
|
|
)
|
|
|
|
// A chart response is what we get back from Yahoo Finance
|
|
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
|
|
}
|