如何构建 WAMP 协议客户端以订阅 Python2?
How can I build a WAMP protocol client to subscibe in Python2?
我想构建一个 WAMP(Web 应用程序消息传递协议)客户端来订阅 poloniex 的代码。 poloniex 的 API 文档中有一些有用的信息,如下所示:
The best way to get public data updates on markets is via the push API,
which pushes live ticker, order book, trade, and Trollbox updates over
WebSockets using the WAMP protocol. In order to use the push API,
connect to wss://api.poloniex.com and subscribe to the desired feed.
In order to receive ticker updates, subscribe to "ticker".
但是他们没有说如何使用python订阅it.Then我尝试在google中搜索,我没有任何帮助。
谁能告诉我如何构建一个 WAMP 客户端来订阅 poloniex 的代码?谢谢!
------------更新------------
我发现代码似乎在做我想做的事情:
from autobahn.asyncio.wamp import ApplicationSession
from autobahn.asyncio.wamp import ApplicationRunner
from asyncio import coroutine
class PoloniexComponent(ApplicationSession):
def onConnect(self):
self.join(self.config.realm)
@coroutine
def onJoin(self, details):
def onTicker(*args):
print("Ticker event received:", args)
try:
yield from self.subscribe(onTicker, 'ticker')
except Exception as e:
print("Could not subscribe to topic:", e)
def main():
runner = ApplicationRunner(u"wss://api.poloniex.com:443", "realm1")
runner.run(PoloniexComponent)
if __name__ == "__main__":
main()
但显示错误如下:
Traceback (most recent call last):
File "wamp.py", line 5, in <module>
from autobahn.asyncio.wamp import ApplicationSession
File "/usr/lib/python2.7/site-packages/autobahn/asyncio/__init__.py", line 36, in <module>
from autobahn.asyncio.websocket import \
File "/usr/lib/python2.7/site-packages/autobahn/asyncio/websocket.py", line 32, in <module>
txaio.use_asyncio()
File "/usr/lib/python2.7/site-packages/txaio/__init__.py", line 122, in use_asyncio
from txaio import aio
File "/usr/lib/python2.7/site-packages/txaio/aio.py", line 47, in <module>
import asyncio
File "/usr/lib/python2.7/site-packages/asyncio/__init__.py", line 9, in <module>
from . import selectors
File "/usr/lib/python2.7/site-packages/asyncio/selectors.py", line 39
"{!r}".format(fileobj)) from None
^
SyntaxError: invalid syntax
我发现了一些线索,似乎某些模块只能在 python3 中正常工作。多么失望!
最后我找到了下面的答案,它可以做我想做的事:
import websocket
import thread
import time
import json
def on_message(ws, message):
print(message)
def on_error(ws, error):
print(error)
def on_close(ws):
print("### closed ###")
def on_open(ws):
print("ONOPEN")
def run(*args):
ws.send(json.dumps({'command':'subscribe','channel':1001}))
ws.send(json.dumps({'command':'subscribe','channel':1002}))
ws.send(json.dumps({'command':'subscribe','channel':1003}))
ws.send(json.dumps({'command':'subscribe','channel':'BTC_XMR'}))
while True:
time.sleep(1)
ws.close()
print("thread terminating...")
thread.start_new_thread(run, ())
if __name__ == "__main__":
websocket.enableTrace(True)
ws = websocket.WebSocketApp("wss://api2.poloniex.com/",
on_message = on_message,
on_error = on_error,
on_close = on_close)
ws.on_open = on_open
ws.run_forever()
感谢作者点名Ricky Han!
我想构建一个 WAMP(Web 应用程序消息传递协议)客户端来订阅 poloniex 的代码。 poloniex 的 API 文档中有一些有用的信息,如下所示:
The best way to get public data updates on markets is via the push API,
which pushes live ticker, order book, trade, and Trollbox updates over
WebSockets using the WAMP protocol. In order to use the push API,
connect to wss://api.poloniex.com and subscribe to the desired feed.
In order to receive ticker updates, subscribe to "ticker".
但是他们没有说如何使用python订阅it.Then我尝试在google中搜索,我没有任何帮助。
谁能告诉我如何构建一个 WAMP 客户端来订阅 poloniex 的代码?谢谢!
------------更新------------ 我发现代码似乎在做我想做的事情:
from autobahn.asyncio.wamp import ApplicationSession
from autobahn.asyncio.wamp import ApplicationRunner
from asyncio import coroutine
class PoloniexComponent(ApplicationSession):
def onConnect(self):
self.join(self.config.realm)
@coroutine
def onJoin(self, details):
def onTicker(*args):
print("Ticker event received:", args)
try:
yield from self.subscribe(onTicker, 'ticker')
except Exception as e:
print("Could not subscribe to topic:", e)
def main():
runner = ApplicationRunner(u"wss://api.poloniex.com:443", "realm1")
runner.run(PoloniexComponent)
if __name__ == "__main__":
main()
但显示错误如下:
Traceback (most recent call last):
File "wamp.py", line 5, in <module>
from autobahn.asyncio.wamp import ApplicationSession
File "/usr/lib/python2.7/site-packages/autobahn/asyncio/__init__.py", line 36, in <module>
from autobahn.asyncio.websocket import \
File "/usr/lib/python2.7/site-packages/autobahn/asyncio/websocket.py", line 32, in <module>
txaio.use_asyncio()
File "/usr/lib/python2.7/site-packages/txaio/__init__.py", line 122, in use_asyncio
from txaio import aio
File "/usr/lib/python2.7/site-packages/txaio/aio.py", line 47, in <module>
import asyncio
File "/usr/lib/python2.7/site-packages/asyncio/__init__.py", line 9, in <module>
from . import selectors
File "/usr/lib/python2.7/site-packages/asyncio/selectors.py", line 39
"{!r}".format(fileobj)) from None
^
SyntaxError: invalid syntax
我发现了一些线索,似乎某些模块只能在 python3 中正常工作。多么失望!
最后我找到了下面的答案,它可以做我想做的事:
import websocket
import thread
import time
import json
def on_message(ws, message):
print(message)
def on_error(ws, error):
print(error)
def on_close(ws):
print("### closed ###")
def on_open(ws):
print("ONOPEN")
def run(*args):
ws.send(json.dumps({'command':'subscribe','channel':1001}))
ws.send(json.dumps({'command':'subscribe','channel':1002}))
ws.send(json.dumps({'command':'subscribe','channel':1003}))
ws.send(json.dumps({'command':'subscribe','channel':'BTC_XMR'}))
while True:
time.sleep(1)
ws.close()
print("thread terminating...")
thread.start_new_thread(run, ())
if __name__ == "__main__":
websocket.enableTrace(True)
ws = websocket.WebSocketApp("wss://api2.poloniex.com/",
on_message = on_message,
on_error = on_error,
on_close = on_close)
ws.on_open = on_open
ws.run_forever()
感谢作者点名Ricky Han!