def parseResponse(self, body_buf): pos = 0 # 算了,前面不解析了,没太大用 # (market, code) = struct.unpack("<B9s", body_buf[0: 10]) pos += 18 (ret_count, ) = struct.unpack('<H', body_buf[pos:pos + 2]) pos += 2 klines = [] for i in range(ret_count): year, month, day, hour, minute, pos = get_datetime( self.category, body_buf, pos) (open_price, high, low, close, position, trade, price) = struct.unpack("<ffffIIf", body_buf[pos:pos + 28]) pos += 28 kline = OrderedDict([ ("open", open_price), ("high", high), ("low", low), ("close", close), ("position", position), ("trade", trade), ("price", price), ("year", year), ("month", month), ("day", day), ("hour", hour), ("minute", minute), ("datetime", "%d-%02d-%02d %02d:%02d" % (year, month, day, hour, minute)) ]) klines.append(kline) return klines
def parseResponse(self, body_buf): pos = 0 (ret_count, ) = struct.unpack("<H", body_buf[0:2]) pos += 2 klines = [] pre_diff_base = 0 for i in range(ret_count): year, month, day, hour, minute, pos = get_datetime( self.category, body_buf, pos) price_open_diff, pos = get_price(body_buf, pos) price_close_diff, pos = get_price(body_buf, pos) price_high_diff, pos = get_price(body_buf, pos) price_low_diff, pos = get_price(body_buf, pos) (vol_raw, ) = struct.unpack("<I", body_buf[pos:pos + 4]) vol = get_volume(vol_raw) pos += 4 (dbvol_raw, ) = struct.unpack("<I", body_buf[pos:pos + 4]) dbvol = get_volume(dbvol_raw) pos += 4 (up_count, down_count) = struct.unpack("<HH", body_buf[pos:pos + 4]) pos += 4 open = self._cal_price1000(price_open_diff, pre_diff_base) price_open_diff = price_open_diff + pre_diff_base close = self._cal_price1000(price_open_diff, price_close_diff) high = self._cal_price1000(price_open_diff, price_high_diff) low = self._cal_price1000(price_open_diff, price_low_diff) pre_diff_base = price_open_diff + price_close_diff #### 为了避免python处理浮点数的时候,浮点数运算不精确问题,这里引入了多余的代码 kline = OrderedDict([ ("open", open), ("close", close), ("high", high), ("low", low), ("vol", vol), ("amount", dbvol), ("year", year), ("month", month), ("day", day), ("hour", hour), ("minute", minute), ("datetime", "%d-%02d-%02d %02d:%02d" % (year, month, day, hour, minute)), ("up_count", up_count), ("down_count", down_count) ]) klines.append(kline) return klines
def parseResponse(self, body_buf): pos = 0 if len(body_buf) < 11: return [] pos += 9 # skip 9 (num, ) = struct.unpack("<H", body_buf[pos:pos+2]) pos += 2 rows = [] for i in range(num): market, code = struct.unpack(u"<B6s", body_buf[:7]) pos += 7 # noused = struct.unpack(u"<B", body_buf[pos: pos+1]) pos += 1 #skip a byte year, month, day, hour, minite, pos = get_datetime(9, body_buf, pos) (category, ) = struct.unpack(u"<B", body_buf[pos: pos+1]) pos += 1 # b'\x00\xe8\x00G' => 33000.00000 # b'\x00\xc0\x0fF' => 9200.00000 # b'\x00@\x83E' => 4200.0000 panqianliutong_raw, qianzongguben_raw, panhouliutong_raw, houzongguben_raw = struct.unpack("<IIII", body_buf[pos: pos + 16]) pos += 16 def _get_v(v): if v == 0: return 0 else: return get_volume(v) row = OrderedDict( [ ('year', year), ('month', month), ('day', day), ('category', category), ('panqianliutong', _get_v(panqianliutong_raw)), ('panhouliutong', _get_v(panhouliutong_raw)), ('qianzongguben', _get_v(qianzongguben_raw)), ('houzongguben', _get_v(houzongguben_raw)), ] ) rows.append(row) return rows
def parseResponse(self, body_buf): pos = 0 if len(body_buf) < 11: return [] pos += 9 # skip 9 (num, ) = struct.unpack("<H", body_buf[pos:pos + 2]) pos += 2 rows = [] for i in range(num): market, code = struct.unpack(u"<B6s", body_buf[:7]) pos += 7 pos += 1 #skip a byte year, month, day, hour, minite, pos = get_datetime( 9, body_buf, pos) pos += 1 #skip a byte # b'\x00\xe8\x00G' => 33000.00000 # b'\x00\xc0\x0fF' => 9200.00000 # b'\x00@\x83E' => 4200.0000 cash_raw, peigu_price_raw, songgu_num_raw, peigu_percent_raw = struct.unpack( "<IIII", body_buf[pos:pos + 16]) pos += 16 def _get_v(v): if v == 0: return 0 else: return get_volume(v) row = OrderedDict([ ('year', year), ('month', month), ('day', day), ('cash', _get_v(cash_raw)), ('peigu_price', _get_v(peigu_price_raw)), ('songgu_num', _get_v(songgu_num_raw)), ('peigu_percent', _get_v(peigu_percent_raw)), ]) rows.append(row) return rows
def parseResponse(self, body_buf): pos = 0 # 算了,前面不解析了,没太大用 # (market, code) = struct.unpack("<B9s", body_buf[0: 10]) pos += 18 (ret_count, ) = struct.unpack('<H', body_buf[pos: pos+2]) pos += 2 klines = [] for i in range(ret_count): year, month, day, hour, minute, pos = get_datetime(self.category, body_buf, pos) (open_price, high, low, close, position, trade, price) = struct.unpack("<ffffIIf", body_buf[pos: pos+28]) (amount, ) = struct.unpack("f", body_buf[pos+16: pos+16+4]) pos += 28 kline = OrderedDict([ ("open", open_price), ("high", high), ("low", low), ("close", close), ("position", position), ("trade", trade), ("price", price), ("year", year), ("month", month), ("day", day), ("hour", hour), ("minute", minute), ("datetime", "%d-%02d-%02d %02d:%02d" % (year, month, day, hour, minute)), ("amount", amount), ]) klines.append(kline) return klines
def parseResponse(self, body_buf): pos = 0 if len(body_buf) < 11: return [] pos += 9 # skip 9 (num, ) = struct.unpack("<H", body_buf[pos:pos + 2]) pos += 2 rows = [] def _get_v(v): if v == 0: return 0 else: return get_volume(v) for i in range(num): market, code = struct.unpack(u"<B6s", body_buf[:7]) pos += 7 # noused = struct.unpack(u"<B", body_buf[pos: pos+1]) pos += 1 #skip a byte year, month, day, hour, minite, pos = get_datetime( 9, body_buf, pos) (category, ) = struct.unpack(u"<B", body_buf[pos:pos + 1]) pos += 1 # b'\x00\xe8\x00G' => 33000.00000 # b'\x00\xc0\x0fF' => 9200.00000 # b'\x00@\x83E' => 4200.0000 suogu = None panqianliutong, panhouliutong, qianzongguben, houzongguben = None, None, None, None songzhuangu, fenhong, peigu, peigujia = None, None, None, None if category == 1: fenhong, peigujia, songzhuangu, peigu = struct.unpack( "<ffff", body_buf[pos:pos + 16]) elif category == 11: (_, _, suogu_raw, _) = struct.unpack("<IIII", body_buf[pos:pos + 16]) suogu = _get_v(suogu_raw) else: panqianliutong_raw, qianzongguben_raw, panhouliutong_raw, houzongguben_raw = struct.unpack( "<IIII", body_buf[pos:pos + 16]) panqianliutong = _get_v(panqianliutong_raw) panhouliutong = _get_v(panhouliutong_raw) qianzongguben = _get_v(qianzongguben_raw) houzongguben = _get_v(houzongguben_raw) pos += 16 row = OrderedDict([ ('year', year), ('month', month), ('day', day), ('category', category), ('fenhong', fenhong), ('peigujia', peigujia), ('songzhuangu', songzhuangu), ('peigu', peigu), ('suogu', suogu), ('panqianliutong', panqianliutong), ('panhouliutong', panhouliutong), ('qianzongguben', qianzongguben), ('houzongguben', houzongguben), ]) rows.append(row) return rows
def parseResponse(self, body_buf): pos = 0 if len(body_buf) < 11: return [] pos += 9 # skip 9 (num, ) = struct.unpack("<H", body_buf[pos:pos+2]) pos += 2 rows = [] def _get_v(v): if v == 0: return 0 else: return get_volume(v) for i in range(num): market, code = struct.unpack(u"<B6s", body_buf[:7]) pos += 7 # noused = struct.unpack(u"<B", body_buf[pos: pos+1]) pos += 1 #skip a byte year, month, day, hour, minite, pos = get_datetime(9, body_buf, pos) (category, ) = struct.unpack(u"<B", body_buf[pos: pos+1]) pos += 1 # b'\x00\xe8\x00G' => 33000.00000 # b'\x00\xc0\x0fF' => 9200.00000 # b'\x00@\x83E' => 4200.0000 suogu = None panqianliutong, panhouliutong, qianzongguben, houzongguben = None, None, None, None songzhuangu, fenhong, peigu, peigujia = None, None, None, None fenshu, xingquanjia = None, None if category == 1: fenhong, peigujia, songzhuangu, peigu = struct.unpack("<ffff", body_buf[pos: pos + 16]) elif category in [11, 12]: (_, _, suogu, _) = struct.unpack("<IIfI", body_buf[pos: pos + 16]) elif category in [13, 14]: xingquanjia, _, fenshu, _ = struct.unpack("<fIfI", body_buf[pos: pos + 16]) else: panqianliutong_raw, qianzongguben_raw, panhouliutong_raw, houzongguben_raw = struct.unpack("<IIII", body_buf[pos: pos + 16]) panqianliutong = _get_v(panqianliutong_raw) panhouliutong = _get_v(panhouliutong_raw) qianzongguben = _get_v(qianzongguben_raw) houzongguben = _get_v(houzongguben_raw) pos += 16 row = OrderedDict( [ ('year', year), ('month', month), ('day', day), ('category', category), ('name', self.get_category_name(category)), ('fenhong', fenhong), ('peigujia', peigujia), ('songzhuangu', songzhuangu), ('peigu', peigu), ('suogu', suogu), ('panqianliutong', panqianliutong), ('panhouliutong', panhouliutong), ('qianzongguben', qianzongguben), ('houzongguben', houzongguben), ('fenshu', fenshu), ('xingquanjia', xingquanjia) ] ) rows.append(row) return rows