go获取网上股市数据并实时图表显示的源代码
时间: 2023-07-28 09:04:48 浏览: 115
以下是一个使用Go语言获取股市数据并实时显示图表的源代码示例:
```go
package main
import (
"encoding/json"
"fmt"
"log"
"net/http"
"os"
"time"
"github.com/wcharczuk/go-chart"
)
type StockData struct {
Symbol string `json:"symbol"`
Price float64 `json:"price"`
Time int64 `json:"time"`
}
func main() {
http.HandleFunc("/", handleRequest)
go updateChartData()
err := http.ListenAndServe(":8080", nil)
if err != nil {
log.Fatal(err)
}
}
func handleRequest(w http.ResponseWriter, r *http.Request) {
f, err := os.Open("chart.png")
if err != nil {
fmt.Fprint(w, "Error loading chart")
return
}
defer f.Close()
w.Header().Set("Content-Type", "image/png")
_, err = io.Copy(w, f)
if err != nil {
fmt.Fprint(w, "Error loading chart")
}
}
func updateChartData() {
for {
data, err := fetchStockData()
if err != nil {
log.Println("Error fetching stock data:", err)
time.Sleep(time.Minute)
continue
}
err = generateChart(data)
if err != nil {
log.Println("Error generating chart:", err)
time.Sleep(time.Minute)
continue
}
time.Sleep(time.Minute)
}
}
func fetchStockData() ([]StockData, error) {
resp, err := http.Get("https://api.example.com/stockdata")
if err != nil {
return nil, err
}
defer resp.Body.Close()
var data []StockData
err = json.NewDecoder(resp.Body).Decode(&data)
if err != nil {
return nil, err
}
return data, nil
}
func generateChart(data []StockData) error {
xValues := make([]time.Time, len(data))
yValues := make([]float64, len(data))
for i, d := range data {
xValues[i] = time.Unix(d.Time, 0)
yValues[i] = d.Price
}
graph := chart.Chart{
XAxis: chart.XAxis{
Name: "Time",
ValueType: chart.Time,
},
YAxis: chart.YAxis{
Name: "Price",
},
Series: []chart.Series{
chart.TimeSeries{
XValues: xValues,
YValues: yValues,
},
},
}
f, err := os.Create("chart.png")
if err != nil {
return err
}
defer f.Close()
err = graph.Render(chart.PNG, f)
if err != nil {
return err
}
return nil
}
```
该代码使用Go语言编写,通过HTTP请求获取股市数据,并使用`github.com/wcharczuk/go-chart`库生成实时图表。它在8080端口上启动了一个HTTP服务器,在根路径下返回实时生成的图表。
`updateChartData`函数负责定期从API获取股市数据,并调用`generateChart`函数生成图表。`fetchStockData`函数发送HTTP请求获取JSON格式的股市数据,并解码到`StockData`结构体切片中。`generateChart`函数将股市数据转换为图表,使用`chart.TimeSeries`表示时间序列,并将图表渲染为PNG格式保存到文件。最后,`handleRequest`函数处理HTTP请求,从文件中读取图表,并将其作为响应返回给客户端。
请注意,以上代码仅为示例,需要根据实际需求进行修改和调整。
阅读全文