package processor import ( "encoding/json" "fmt" "github.com/gin-gonic/gin" "net/http" "strings" "wss-pool/config" "wss-pool/dictionary" "wss-pool/internal" "wss-pool/internal/data/business" red "wss-pool/internal/redis" "wss-pool/logging/applogger" "wss-pool/pkg/model" "wss-pool/pkg/model/stock" ) /* 现货-K线数据(蜡烛图) https://api.huobi.pro/market/history/kline?symbol=btcusdt&period=1min&size=20 1、symbol 交易对 例如:btcusdt, ethbtc 2、period 返回数据时间粒度,也就是每根蜡烛的时间区间 目前提供:[1min, 5min, 15min, 30min, 60min, 4hour, 1day, 1mon, 1week, 1year] 3、size 返回K线数据条数 例如:[1-2000] */ var TradeMap = map[string]int{ "buy": 1, "sell": 2, } func SpotsKline(c *gin.Context) { symbol := internal.ReplaceStr(c.Query("symbol")) period := internal.ReplaceStr(c.Query("period")) size := internal.IntegerInit(internal.ReplaceStr(c.Query("size"))) var param string if len(symbol) > 0 { param = fmt.Sprintf("symbol=%v", symbol) } if len(period) > 0 { param = param + "&" + fmt.Sprintf("period=%v", period) } if size > 0 { param = param + "&" + fmt.Sprintf("size=%v", size) } url := fmt.Sprintf("https://%v/market/history/kline?%v", config.Config.HbApi.HbSpotsApiHost, param) applogger.Debug("查询数据信息:%v", url) bodyStr, err := internal.HttpGet(url) if err != nil { c.JSON(http.StatusOK, internal.GinResult(http.StatusBadRequest, err, internal.QueryError)) return } //applogger.Debug("第三方数据接收:%v", bodyStr) c.JSON(http.StatusOK, internal.GinResult(http.StatusOK, bodyStr, internal.QuerySuccess)) } /* 现货-聚合行情(Ticker) https://api.huobi.pro/market/detail/merged?symbol=btcusdt 1、symbol 交易对 例如:btcusdt, ethbtc */ func SpotsMerged(c *gin.Context) { symbol := internal.ReplaceStr(c.Query("symbol")) var param string if len(symbol) > 0 { param = fmt.Sprintf("symbol=%v", symbol) } url := fmt.Sprintf("https://%v/market/detail/merged?%v", config.Config.HbApi.HbSpotsApiHost, param) applogger.Debug("查询数据信息:%v", url) bodyStr, err := internal.HttpGet(url) if err != nil { c.JSON(http.StatusOK, internal.GinResult(http.StatusOK, err, internal.QueryError)) return } //applogger.Debug("第三方数据接收:%v", bodyStr) c.JSON(http.StatusOK, internal.GinResult(http.StatusOK, bodyStr, internal.QuerySuccess)) } // 现货列表 https://api.huobi.pro/market/detail/merged?symbol=btcusdt func SpotsMergedList(c *gin.Context) { var mergedList []model.GetSpotsTickCompleteList // 循环获取现货列表 for _, value := range dictionary.Symbol { param := fmt.Sprintf("%vusdt", value) url := fmt.Sprintf("https://%v/market/detail/merged?symbol=%v", config.Config.HbApi.HbSpotsApiHost, param) applogger.Debug("查询数据信息:%v", url) bodyStr, err := internal.HttpGet(url) if err != nil { c.JSON(http.StatusOK, internal.GinResult(http.StatusOK, err, internal.QueryError)) return } applogger.Debug("第三方数据接收:%v", bodyStr) var merged model.GetSpotsTickList if err := json.Unmarshal([]byte(bodyStr), &merged); err != nil { applogger.Error("Unmarshal err:%v", err) continue } mergedCon := model.GetSpotsTickCompleteList{ Tick: merged.Tick, Ch: merged.Ch, Status: merged.Status, Ts: merged.Ts, Icon: "", FullName: "", } mergedList = append(mergedList, mergedCon) } c.JSON(http.StatusOK, internal.GinResult(http.StatusOK, mergedList, internal.QuerySuccess)) } /* 现货-所有交易对的最新 Tickers https://api.huobi.pro/market/tickers */ func SpotsTickers(c *gin.Context) { url := fmt.Sprintf("https://%v/market/tickers", config.Config.HbApi.HbSpotsApiHost) applogger.Debug("查询数据信息:%v", url) bodyStr, err := internal.HttpGet(url) if err != nil { c.JSON(http.StatusOK, internal.GinResult(http.StatusOK, err, internal.QueryError)) return } //applogger.Debug("第三方数据接收:%v", bodyStr) c.JSON(http.StatusOK, internal.GinResult(http.StatusOK, bodyStr, internal.QuerySuccess)) } /* 现货-市场深度数据 https://api.huobi.pro/market/depth?symbol=btcusdt&depth=5&type=step0 1、symbol 交易对 例如:btcusdt, ethbtc 2、depth 返回深度的数量 例如:5,10,20 3、type 深度的价格聚合度,具体说明见下方 例如:step0,step1,step2,step3,step4,step5 */ func SpotsDepth(c *gin.Context) { symbol := internal.ReplaceStr(c.Query("symbol")) depth := internal.IntegerInit(internal.ReplaceStr(c.Query("depth"))) typeS := internal.ReplaceStr(c.Query("type")) var param string if len(symbol) > 0 { param = fmt.Sprintf("symbol=%v", symbol) } if depth > 0 { param = param + "&" + fmt.Sprintf("depth=%v", depth) } if len(typeS) > 0 { param = param + "&" + fmt.Sprintf("type=%v", typeS) } url := fmt.Sprintf("https://%v/market/depth?%v", config.Config.HbApi.HbSpotsApiHost, param) applogger.Debug("查询数据信息:%v", url) bodyStr, err := internal.HttpGet(url) if err != nil { c.JSON(http.StatusOK, internal.GinResult(http.StatusOK, err, internal.QueryError)) //return } if strings.Contains(bodyStr, "invalid-parameter") { chStep6 := fmt.Sprintf("market-%s-depth-step0", symbol) bodyStr, _ = red.Get_Cache_Data(chStep6) } //applogger.Debug("第三方数据接收:%v", bodyStr) c.JSON(http.StatusOK, internal.GinResult(http.StatusOK, bodyStr, internal.QuerySuccess)) } /* 现货-最近市场成交记录 https://api.huobi.pro/market/trade?symbol=btcusdt 1、symbol 交易对 例如:btcusdt, ethbtc */ func SpotsTrade(c *gin.Context) { symbol := internal.ReplaceStr(c.Query("symbol")) var param string if len(symbol) > 0 { param = fmt.Sprintf("symbol=%v", symbol) } url := fmt.Sprintf("https://%v/market/trade?%v", config.Config.HbApi.HbSpotsApiHost, param) applogger.Debug("查询数据信息:%v", url) bodyStr, err := internal.HttpGet(url) if err != nil { c.JSON(http.StatusOK, internal.GinResult(http.StatusOK, err, internal.QueryError)) return } //applogger.Debug("第三方数据接收:%v", bodyStr) c.JSON(http.StatusOK, internal.GinResult(http.StatusOK, bodyStr, internal.QuerySuccess)) } /* 现货-获得近期交易记录 https://api.huobi.pro/market/history/trade?symbol=btcusdt&size=2 1、symbol 交易对 例如:btcusdt, ethbtc... 2、size 返回的交易记录数量,最大值2000 */ func SpotsHistoryTrade(c *gin.Context) { symbol := internal.ReplaceStr(c.Query("symbol")) size := internal.IntegerInit(internal.ReplaceStr(c.Query("size"))) //symbols := strings.Split(symbol, "usdt") //phpRes := websocketservice.PHPMarketTrade(SpotsStatus, size, symbols[0]) //num := size - len(phpRes.List) var param string if len(symbol) > 0 { param = fmt.Sprintf("symbol=%v", symbol) } if size > 0 { param = param + "&" + fmt.Sprintf("size=%v", size) } //if num > 0 { phpRes := stock.PHPMarketTradeList{} url := fmt.Sprintf("https://%v/market/history/trade?%v", config.Config.HbApi.HbSpotsApiHost, param) applogger.Debug("查询数据信息:%v", url) huobiRes := business.MarketTrade{} bodyStr, _ := internal.HttpGet(url) json.Unmarshal([]byte(bodyStr), &huobiRes) for _, v := range huobiRes.Data { item := stock.MarketTrade{ ID: v.Data[0].ID, OrderNumber: fmt.Sprintf("%f", v.Data[0].Amount), DealPrice: fmt.Sprintf("%f", v.Data[0].Price), OrderTime: v.Data[0].Ts, TradeType: TradeMap[v.Data[0].Direction], IsHuobi: true, } phpRes.List = append(phpRes.List, item) } if len(phpRes.List) <= 0 { title := fmt.Sprintf("market-%s-trade-detail", symbol) item, _ := red.Get_Cache_Data(title) json.Unmarshal([]byte(item), &phpRes.List) } //} //applogger.Debug("第三方数据接收:%v", bodyStr) c.JSON(http.StatusOK, internal.GinResult(http.StatusOK, phpRes.List, internal.QuerySuccess)) } /* 现货-最近24小时行情数据 https://api.huobi.pro/market/detail?symbol=btcusdt 1、symbol 交易对 例如:btcusdt, ethbtc */ func SpotsDetail(c *gin.Context) { symbol := internal.ReplaceStr(c.Query("symbol")) var param string if len(symbol) > 0 { param = fmt.Sprintf("symbol=%v", symbol) } url := fmt.Sprintf("https://%v/market/detail?%v", config.Config.HbApi.HbSpotsApiHost, param) applogger.Debug("查询数据信息:%v", url) bodyStr, err := internal.HttpGet(url) if err != nil { c.JSON(http.StatusOK, internal.GinResult(http.StatusOK, err, internal.QueryError)) return } if strings.Contains(bodyStr, "invalid-parameter") { title := fmt.Sprintf("market-%s-detail-merged", symbol) bodyStr, _ = red.Get_Cache_Data(title) } //applogger.Debug("第三方数据接收:%v", bodyStr) c.JSON(http.StatusOK, internal.GinResult(http.StatusOK, bodyStr, internal.QuerySuccess)) }