更新对应交易的代码实现
This commit is contained in:
94
proto/stock.go
Normal file
94
proto/stock.go
Normal file
@@ -0,0 +1,94 @@
|
||||
package proto
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"net/url"
|
||||
)
|
||||
|
||||
var appId = "2D64E3B7A9884A8C5E2BFF437763E76A"
|
||||
var StockApiHost = "http://kindics.com:7040"
|
||||
var appSecret = "5105D41CE0527A9AF6A307341B3ADA10"
|
||||
|
||||
func StockDetail(market string, stockType uint64, stockSymbol string) (map[string]any, error) {
|
||||
instrument := fmt.Sprintf("%s|%d|%s", market, stockType, stockSymbol)
|
||||
|
||||
data := url.Values{
|
||||
"appId": {appId},
|
||||
"appSecret": {appSecret},
|
||||
"action": {"/V2/Quotation/Detail"},
|
||||
"instrument": {instrument},
|
||||
"lang": {"zh-CN"},
|
||||
}
|
||||
|
||||
resp, err := http.PostForm(StockApiHost, data)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
body, err := io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var result map[string]interface{}
|
||||
err = json.Unmarshal(body, &result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if result["code"].(float64) == 1 {
|
||||
response := result["data"].(map[string]interface{})
|
||||
|
||||
lastTradeDate := "1991-01-01"
|
||||
if date, ok := response["lastTradeDate"].(string); ok && date != "" {
|
||||
lastTradeDate = date[:4] + "-" + date[4:6] + "-" + date[6:]
|
||||
}
|
||||
|
||||
maturityDate := "1991-01-01"
|
||||
if date, ok := response["maturityDate"].(string); ok && date != "" {
|
||||
maturityDate = date[:4] + "-" + date[4:6] + "-" + date[6:]
|
||||
}
|
||||
|
||||
inlineFlag := 2
|
||||
if flag, ok := response["inlineFlag"].(float64); ok {
|
||||
inlineFlag = int(flag)
|
||||
}
|
||||
|
||||
return map[string]interface{}{
|
||||
"symbol": response["symbol"],
|
||||
"name": response["name"],
|
||||
"msgs": response["lotSize"],
|
||||
"price": response["latestPrice"],
|
||||
"securityStatus": response["securityStatus"],
|
||||
"exercisePrice": getFloat(response, "exercisePrice"),
|
||||
"makePeace": getFloat(response, "makePeace"),
|
||||
"exchangeRatio": getFloat(response, "exchangeRatio"),
|
||||
"exchangePrice": getFloat(response, "exchangePrice"),
|
||||
"callPrice": getFloat(response, "callPrice"),
|
||||
"lastTradeDate": lastTradeDate,
|
||||
"maturityDate": maturityDate,
|
||||
"callOrPut": getString(response, "callOrPut"),
|
||||
"inlineFlag": inlineFlag,
|
||||
}, nil
|
||||
}
|
||||
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func getFloat(m map[string]interface{}, key string) float64 {
|
||||
if val, ok := m[key].(float64); ok {
|
||||
return val
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func getString(m map[string]interface{}, key string) string {
|
||||
if val, ok := m[key].(string); ok {
|
||||
return val
|
||||
}
|
||||
return ""
|
||||
}
|
||||
11
proto/stock_test.go
Normal file
11
proto/stock_test.go
Normal file
@@ -0,0 +1,11 @@
|
||||
package proto
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestStockAPI(t *testing.T) {
|
||||
result, err := StockDetail("HKEX", 1, "01237")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
t.Error(result)
|
||||
}
|
||||
Reference in New Issue
Block a user