因为 websocket-client 新版的各种大脑降级设计 很多功能无法使用
需要安装老版本websocket-client的包才能正常使用 pip3 install websocket-client==0.46.0

代码复制地址:https://www.fmz.com/strategy/143457

Python源码:

  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. # encoding: utf-8
  4.  
  5. import time
  6. import ssl
  7. import sys
  8. import code
  9. import json
  10. import hashlib
  11. import hmac
  12. import urllib
  13. import threading
  14. import websocket
  15. import zlib
  16. import string
  17.  
  18. try:
  19. import readline
  20. except ImportError:
  21. pass
  22.  
  23. pong = time.time()
  24.  
  25. class WSSubscription:
  26.  
  27. def __init__(self, instrument_id='BTC-USD-190517', market='futures', on_message=None):
  28. self.__iid = instrument_id
  29. self.__market = market
  30. self.__Depth = {}
  31.  
  32. if on_message is not None:
  33. self.__callbackEnabled = True
  34. self.__callback = on_message
  35. else:
  36. self.__callbackEnabled = False
  37.  
  38. thread = threading.Thread(target=self.sub, args=())
  39. thread.daemon = True
  40. thread.start()
  41.  
  42. def GetDepth(self):
  43. return self.__Depth
  44.  
  45. def subscribe(self, ws):
  46.  
  47. def operator(op, args):
  48. message = {
  49. 'op': op,
  50. 'args': args
  51. }
  52. ws.send(json.dumps(message))
  53.  
  54. def run(*args):
  55. operator('subscribe', ['%s/depth5:%s' % (self.__market, self.__iid)])
  56. operator('subscribe', ['%s/trade:%s' % (self.__market, self.__iid)])
  57.  
  58. while True:
  59. ws.send("ping")
  60. time.sleep(30)
  61.  
  62. threading.Thread(target=run).start()
  63.  
  64. def sub(self):
  65.  
  66. websocket.enableTrace(False)
  67. URL = "wss://real.okex.com:10442/ws/v3"
  68. ws = websocket.WebSocketApp(URL,
  69. on_message=self.incoming,
  70. on_error=self.error_handling,
  71. on_close=self.closing)
  72.  
  73. ws.on_open = self.subscribe
  74.  
  75. while True:
  76. try:
  77. ws.run_forever()
  78. except:
  79. pass
  80.  
  81. pass
  82.  
  83. def incoming(self,ws,message):
  84. message = zlib.decompress(message, -zlib.MAX_WBITS)
  85. message = message.decode('utf-8')
  86. global pong
  87. if 'pong' in message:
  88. pong = time.time()
  89. if 'asks' in message and 'bids' in message:
  90. d = json.loads(message)
  91. self.__Depth = d['data'][0]
  92.  
  93. if self.__callbackEnabled:
  94. self.__callback(message)
  95.  
  96. def error_handling(self,ws,error):
  97. print(str(error))
  98.  
  99. def closing(self,ws):
  100. print("WebSocket Closing...")
  101.  
  102. ext.OkEXWS = WSSubscription
  103.  
  104. # 模块测试
  105. def main():
  106. OkEX = ext.OkEXWS('BTC-USD-190517', 'futures')
  107. while (True):
  108. Log(OkEX.GetDepth())
  109. time.sleep(1)

  

OKEX websocket API 连接Python范例的更多相关文章

  1. Deribit交易所 websocket API 连接范例

    Deribit websocket API 连接范例,使用JavaScript语言,策略运行在FMZ发明者量化平台. 源码地址:https://www.fmz.com/strategy/147765 ...

  2. WebSocket 介绍(二)-WebSocket API

    这一章介绍如何用WebSocket API来控制协议和创建应用,运用http://websocket.org 提供的现有WebSocket服务器,我们可以收发消息.创建一些简单的WebSocket应用 ...

  3. WebSocket API简介

    WebSocket是html5新增加的一种通信协议,目前流行的浏览器都支持这个协议,例如Chrome,Safari,Firefox,Opera,IE等等,对该协议支持最早的应该是chrome,从chr ...

  4. WebSocket API

    WebSocket API 这一章介绍如何用WebSocket API来控制协议和创建应用,运用http://websocket.org 提供的现有WebSocket服务器,我们可以收发消息.创建一些 ...

  5. Jetty开发指导:Jetty Websocket API

    Jetty WebSocket API使用 Jetty提供了功能更强的WebSocket API,使用一个公共的核心API供WebSockets的服务端和client使用. 他是一个基于WebSock ...

  6. Django websocket 长连接使用

    下载  pip install dwebsocket WebSocket是一种在单个TCP连接上进行全双工通信的协议 WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客 ...

  7. 火币网API文档——WebSocket API简介

    WebSocket API简介 WebSocket协议是基于TCP的一种新的网络协议.它实现了客户端与服务器之间在单个 tcp 连接上的全双工通信,由服务器主动发送信息给客户端,减少了频繁的身份验证等 ...

  8. 火币网API文档——WebSocket API Reference

    订阅 KLine 数据 market.$symbol.kline.$period 成功建立和 WebSocket API 的连接之后,向 Server 发送如下格式的数据来订阅数据: { " ...

  9. WebSocket API使用篇检测浏览器是否支持WebSocket(4)

    WebSocket API是下一代客户端-服务器的异步通信方法.前面有三篇文章已经对WebSocket有了一些介绍,这里我总结了一下.我在使用WebSockets API过程中遇到的问题. 1.检测浏 ...

随机推荐

  1. Populating Next Right Pointers in Each Node (DFS,没想到)

    Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *nex ...

  2. uva 10604

    状态压缩  奇怪的是A与B混合 和 B与A 混合得到的热量可能不同 #include <cstdio> #include <cstdlib> #include <cmat ...

  3. 使用Guava适配不同的callback

    Cache<Key,Value> cache =CacheBuilder.newBuilder() .maximumSize(1000) .build();// look Ma, no C ...

  4. 微信小程序-setData()方法

    一般setData方法多用于点击后改变页面信息或者刷新后与后台交互获取最新的信息 注意: 直接修改 this.data 而不调用 this.setData 是无法改变页面的状态的,还会造成数据不一致 ...

  5. 【Android开发-4】进入实践,最喜欢折腾的计算器

    前言:前面对项目文件有了感性认识.接下来我们就须要通过不断实践,对项目的文件有理性的认识. 曾经折腾Unity3d.IOS开发都是拿计算器开刀.所以这次Android开发实践也不例外,继续拿计算器折腾 ...

  6. iOS xmpp的使用

    #import "AppDelegate.h" //#import "DBAreaItem.h" #pragma mark - #pragma mark Pri ...

  7. Web安全漏洞及攻击

    背景介绍 先说一个在互联网上常见,但是普通人又不太理解的东西--“验证码”. 验证码(CAPTCHA)是“Completely Automated Public Turing test to tell ...

  8. easyui使用心得

    一.搭建easyui运行环境 1.下载easyui压缩文件 2.将降压后的文件添加至webapp目录下 3.引用5个必须的js和css文件  <!--引入easyui样式文件--> < ...

  9. Visual Studio Code Unit Testing

    1.NUnit project.json { "version": "1.0.0-*", "testRunner": "nunit ...

  10. 清理一下电脑垃圾,打开Eclipse发现左边的所有项目消失了

    使用360清理一下电脑垃圾,打开Eclipse发现左边的所有项目消失了,但在相应的workspace能够找到项目,这个问题已经是第三次遇到了(预计是被360清理掉Eclipse的一些部署或配置文件所导 ...