func (w *Huobi) AnalyzeKLinePeroid(symbol string, peroid int) (ret bool, records []Record) { ret = false var huobisymbol string if symbol == "btc_cny" { huobisymbol = "huobibtccny" } else { huobisymbol = "huobiltccny" logger.Fatal("huobi does not support LTC by now, wait for huobi provide it.", huobisymbol) return } req, err := http.NewRequest("GET", fmt.Sprintf(Config["hb_kline_url"], peroid), nil) if err != nil { logger.Fatal(err) return } req.Header.Set("Referer", Config["hb_base_url"]) req.Header.Add("Connection", "keep-alive") req.Header.Add("User-Agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36") logger.Traceln(req) c := util.NewTimeoutClient() logger.Tracef("HTTP req begin AnalyzeKLinePeroid") resp, err := c.Do(req) logger.Tracef("HTTP req end AnalyzeKLinePeroid") if err != nil { logger.Traceln(err) return } defer resp.Body.Close() if resp.StatusCode != 200 { logger.Tracef("HTTP returned status %v", resp) return } var body string contentEncoding := resp.Header.Get("Content-Encoding") logger.Tracef("HTTP returned Content-Encoding %s", contentEncoding) logger.Traceln(resp.Header.Get("Content-Type")) switch contentEncoding { case "gzip": body = util.DumpGZIP(resp.Body) default: bodyByte, err := ioutil.ReadAll(resp.Body) if err != nil { logger.Errorln("read the http stream failed") return } else { body = string(bodyByte) } } ioutil.WriteFile(fmt.Sprintf("cache/hbKLine_%03d.data", peroid), []byte(body), 0644) return analyzePeroidLine(fmt.Sprintf("cache/hbKLine_%03d.data", peroid)) }
func (w *HuobiTrade) httpRequest(pParams map[string]string) (string, error) { v := url.Values{} for key, val := range pParams { v.Add(key, val) } req, err := http.NewRequest("POST", Config["api_url"], strings.NewReader(v.Encode())) if err != nil { logger.Fatal(err) return "", err } req.Header.Set("Content-Type", "application/x-www-form-urlencoded") req.Header.Set("Referer", "https://www.huobi.com/") req.Header.Add("Connection", "keep-alive") req.Header.Add("User-Agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36") logger.Traceln(req) c := util.NewTimeoutClient() logger.Tracef("HTTP req begin HuobiTrade") resp, err := c.Do(req) logger.Tracef("HTTP req end HuobiTrade") if err != nil { logger.Fatal(err) return "", err } defer resp.Body.Close() logger.Tracef("api_url resp StatusCode=%v", resp.StatusCode) logger.Tracef("api_url resp=%v", resp) if resp.StatusCode == 200 { var body string contentEncoding := resp.Header.Get("Content-Encoding") logger.Tracef("HTTP returned Content-Encoding %s", contentEncoding) logger.Traceln(resp.Header.Get("Content-Type")) switch contentEncoding { case "gzip": body = DumpGZIP(resp.Body) default: bodyByte, _ := ioutil.ReadAll(resp.Body) body = string(bodyByte) ioutil.WriteFile("cache/api_url.json", bodyByte, 0644) } logger.Traceln(body) return body, nil } else { logger.Tracef("resp %v", resp) } return "", nil }
func (w *Okcoin) getOrderBook(symbol string) (ret bool, orderBook OrderBook) { //init to false ret = false req, err := http.NewRequest("GET", fmt.Sprintf(Config["ok_depth_url"], symbol), nil) if err != nil { logger.Fatal(err) return } req.Header.Set("Referer", Config["ok_base_url"]) req.Header.Add("Connection", "keep-alive") req.Header.Add("User-Agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36") logger.Traceln(req) c := util.NewTimeoutClient() logger.Tracef("HTTP req begin getOrderBook") resp, err := c.Do(req) logger.Tracef("HTTP req end getOrderBook") if err != nil { logger.Traceln(err) return } defer resp.Body.Close() if resp.StatusCode != 200 { logger.Errorf("HTTP returned status %v", resp) return } var body string contentEncoding := resp.Header.Get("Content-Encoding") logger.Tracef("HTTP returned Content-Encoding %s", contentEncoding) switch contentEncoding { case "gzip": body = util.DumpGZIP(resp.Body) default: bodyByte, err := ioutil.ReadAll(resp.Body) if err != nil { logger.Errorln("read the http stream failed") return } else { body = string(bodyByte) ioutil.WriteFile("cache/okdepth.json", bodyByte, 0644) } } return w.analyzeOrderBook(body) }
func (p *Request) DoJSON() (*Json, error) { j, _ := NewJson([]byte("")) var req *http.Request var err error if p.Method == "POST" { req, err = http.NewRequest(p.Method, p.Uri, strings.NewReader(p.EncodeParams)) } else { req, err = http.NewRequest(p.Method, p.Uri+"?"+p.EncodeParams, nil) } if err != nil { logger.Fatal(err) return j, err } if p.Method == "POST" { req.Header.Add("Accept", "application/json") req.Header.Add("Content-Type", "application/x-www-form-urlencoded") } req.Header.Add("Connection", "keep-alive") req.Header.Add("User-Agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36") logger.Traceln(req) c := util.NewTimeoutClient() logger.Tracef("HTTP req begin HuobiTrade") resp, err := c.Do(req) logger.Tracef("HTTP req end HuobiTrade") if err != nil { logger.Fatal(err) return j, err } defer resp.Body.Close() logger.Tracef("api_url resp StatusCode=%v", resp.StatusCode) logger.Tracef("api_url resp=%v", resp) if resp.StatusCode == 200 { var body string contentEncoding := resp.Header.Get("Content-Encoding") logger.Tracef("HTTP returned Content-Encoding %s", contentEncoding) logger.Traceln(resp.Header.Get("Content-Type")) switch contentEncoding { case "gzip": body = util.DumpGZIP(resp.Body) default: bodyByte, _ := ioutil.ReadAll(resp.Body) body = string(bodyByte) ioutil.WriteFile("cache/api_url.json", bodyByte, 0644) } logger.Traceln(body) return NewJson([]byte(body)) } else { logger.Tracef("resp %v", resp) } return j, nil }
/* SEE DOC: TRADE API https://www.okcoin.com/t-1000097.html 行情API https://www.okcoin.com/shequ/themeview.do?tid=1000052¤tPage=1 //non-official API :P K线数据step单位为second https://www.okcoin.com/kline/period.do?step=60&symbol=okcoinbtccny&nonce=1394955131098 https://www.okcoin.com/kline/trades.do?since=10625682&symbol=okcoinbtccny&nonce=1394955760557 https://www.okcoin.com/kline/depth.do?symbol=okcoinbtccny&nonce=1394955767484 https://www.okcoin.com/real/ticker.do?symbol=0&random=61 //old kline for btc 日数据 https://www.okcoin.com/klineData.do?type=3&marketFrom=0 5分钟数据 https://www.okcoin.com/klineData.do?type=1&marketFrom=0 /for ltc https://www.okcoin.com/klineData.do?type=3&marketFrom=3 */ func (w *Okcoin) AnalyzeKLinePeroid(symbol string, peroid int) (ret bool, records []Record) { var oksymbol string if symbol == "btc_cny" { oksymbol = "okcoinbtccny" } else { oksymbol = "okcoinltccny" } ret = false now := time.Now().UnixNano() / 1000000 req, err := http.NewRequest("GET", fmt.Sprintf(Config["ok_kline_url"], 60*peroid, oksymbol, now), nil) if err != nil { logger.Fatal(err) return } req.Header.Set("Referer", Config["ok_base_url"]) req.Header.Add("Connection", "keep-alive") req.Header.Add("User-Agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36") logger.Traceln(req) c := util.NewTimeoutClient() logger.Tracef("okHTTP req begin") resp, err := c.Do(req) logger.Tracef("okHTTP req end") if err != nil { logger.Traceln(err) return } defer resp.Body.Close() if resp.StatusCode != 200 { logger.Tracef("HTTP returned status %v", resp) return } var body string contentEncoding := resp.Header.Get("Content-Encoding") logger.Tracef("HTTP returned Content-Encoding %s", contentEncoding) logger.Traceln(resp.Header.Get("Content-Type")) switch contentEncoding { case "gzip": body = util.DumpGZIP(resp.Body) default: bodyByte, err := ioutil.ReadAll(resp.Body) if err != nil { logger.Errorln("read the http stream failed") return } else { body = string(bodyByte) ioutil.WriteFile(fmt.Sprintf("cache/okTradeKLine_%03d.data", peroid), bodyByte, 0644) } } return analyzePeroidLine(body) }
func (w *Huobi) AnalyzeKLineMinute(symbol string) (ret bool) { var huobisymbol string if symbol == "btc_cny" { huobisymbol = "huobibtccny" } else { huobisymbol = "huobiltccny" logger.Fatal("huobi does not support LTC by now, wait for huobi provide it.", huobisymbol) return false } req, err := http.NewRequest("GET", Config["trade_fenshi"], nil) if err != nil { logger.Fatal(err) } req.Header.Set("Referer", Config["trade_flash_url"]) req.Header.Add("Connection", "keep-alive") req.Header.Add("User-Agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36") logger.Traceln(req) c := util.NewTimeoutClient() logger.Tracef("HTTP req begin AnalyzeKLineMinute") resp, err := c.Do(req) logger.Tracef("HTTP req end AnalyzeKLineMinute") if err != nil { logger.Traceln(err) return false } defer resp.Body.Close() if resp.StatusCode == 200 { var body string contentEncoding := resp.Header.Get("Content-Encoding") logger.Tracef("HTTP returned Content-Encoding %s", contentEncoding) switch contentEncoding { case "gzip": body = DumpGZIP(resp.Body) default: bodyByte, err := ioutil.ReadAll(resp.Body) if err != nil { logger.Errorln("read the http stream failed") return false } else { body = string(bodyByte) ioutil.WriteFile(fmt.Sprintf("cache/TradeKLine_minute.data"), bodyByte, 0644) } } logger.Traceln(resp.Header.Get("Content-Type")) ret := strings.Contains(body, "您需要登录才能继续") if ret { logger.Traceln("您需要登录才能继续") return false } else { return w.analyzeMinuteLine(fmt.Sprintf("cache/TradeKLine_minute.data"), body) } } else { logger.Tracef("HTTP returned status %v", resp) } return false }