使用 Python 高速公路或其他插座模块阅读 Poloniex Trollbox 上的消息?
Reading Messages on Poloniex Trollbox with Python autbahn or other socket module?
Poloniex 不会 return 向我的套接字发送每条消息。我用下面的代码阅读消息,有时我会得到连续的消息编号,但有时会丢失 10 条消息:
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 onTrollbox(*args):
print("type: ", args[0])
print("message_number: ", args[1])
print("user_name: ", args[2])
print("message: ", args[3])
print("reputation: ", args[4])
try:
yield from self.subscribe(onTrollbox, 'trollbox')
except Exception as e:
print("Could not subscribe to topic:", e)
runner = ApplicationRunner("wss://api.poloniex.com", "realm1")
runner.run(PoloniexComponent)
有人知道更好的解决方案吗?我试过这个,但它根本不起作用:
from websocket import create_connection
ws = create_connection("wss://api.poloniex.com")
ws.send("trollbox")
result = ws.recv()
print "Received '%s'" % result
ws.close()
您可以在此处查看我制作的代码:Here。它使用 Beautiful soup 和 dryscape。它通过访问 Poloniex 网站并等待一段时间来获取它,然后从网站收集数据,在我们的例子中是 Trollbox。我也试过高速公路,这就是我得到的,但它看起来和你的代码一模一样,所以可能不会有任何改进。
from twisted.internet.defer import inlineCallbacks
from autobahn.twisted.wamp import ApplicationSession,ApplicationRunner
#prints recieved message
def tamperMessage(message):
print message
class MyComponent(ApplicationSession):
@inlineCallbacks
def onJoin(self, details):
print("session joined")
#gets message and calls tamperMessage function
def gotMessage(type, messageNumber, username, message, reputation):
tamperMessage(message)
# 1. subscribe to a topic so we receive events
try:
yield self.subscribe(gotMessage,u'trollbox')
except Exception as e:
print("could not subscribe to topic:")
runner = ApplicationRunner(url=u"wss://api.poloniex.com", realm=u"realm1")
解决方法如下:
WAMP API
有时可能会出现这些丢失的消息。这是由于路由软件固有的可扩展性问题,Poloniex 正在开发 pure WebSockets API
(当前用于 Web 界面,但缺少文档)来替换它。新 websocket 服务器的 url 是 wss://api2.poloniex.com:443
并且要连接到 trollbox 消息,您需要发送消息:'{"command" : "subscribe", "channel" : 1001}'
.
这是一个示例代码,使用起来更容易:
from websocket import create_connection
import json
ws = create_connection("wss://api2.poloniex.com:443")
ws.send('{"command" : "subscribe", "channel" : 1001}')
while True:
result = ws.recv()
json_result = json.loads(result)
if len(json_result) >= 3:
print(json_result)
ws.close()
因此 trollbox 目前无法在 wamp 网络套接字上运行,您断开连接的原因是由于不活动。
如果你想检查它,你可以查看网站源代码 here 并查看第 2440 行,看到 trollbox 订阅已被注释。
Poloniex trollbox 现已结束!
您可以访问历史记录 here
Poloniex 不会 return 向我的套接字发送每条消息。我用下面的代码阅读消息,有时我会得到连续的消息编号,但有时会丢失 10 条消息:
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 onTrollbox(*args):
print("type: ", args[0])
print("message_number: ", args[1])
print("user_name: ", args[2])
print("message: ", args[3])
print("reputation: ", args[4])
try:
yield from self.subscribe(onTrollbox, 'trollbox')
except Exception as e:
print("Could not subscribe to topic:", e)
runner = ApplicationRunner("wss://api.poloniex.com", "realm1")
runner.run(PoloniexComponent)
有人知道更好的解决方案吗?我试过这个,但它根本不起作用:
from websocket import create_connection
ws = create_connection("wss://api.poloniex.com")
ws.send("trollbox")
result = ws.recv()
print "Received '%s'" % result
ws.close()
您可以在此处查看我制作的代码:Here。它使用 Beautiful soup 和 dryscape。它通过访问 Poloniex 网站并等待一段时间来获取它,然后从网站收集数据,在我们的例子中是 Trollbox。我也试过高速公路,这就是我得到的,但它看起来和你的代码一模一样,所以可能不会有任何改进。
from twisted.internet.defer import inlineCallbacks
from autobahn.twisted.wamp import ApplicationSession,ApplicationRunner
#prints recieved message
def tamperMessage(message):
print message
class MyComponent(ApplicationSession):
@inlineCallbacks
def onJoin(self, details):
print("session joined")
#gets message and calls tamperMessage function
def gotMessage(type, messageNumber, username, message, reputation):
tamperMessage(message)
# 1. subscribe to a topic so we receive events
try:
yield self.subscribe(gotMessage,u'trollbox')
except Exception as e:
print("could not subscribe to topic:")
runner = ApplicationRunner(url=u"wss://api.poloniex.com", realm=u"realm1")
解决方法如下:
WAMP API
有时可能会出现这些丢失的消息。这是由于路由软件固有的可扩展性问题,Poloniex 正在开发 pure WebSockets API
(当前用于 Web 界面,但缺少文档)来替换它。新 websocket 服务器的 url 是 wss://api2.poloniex.com:443
并且要连接到 trollbox 消息,您需要发送消息:'{"command" : "subscribe", "channel" : 1001}'
.
这是一个示例代码,使用起来更容易:
from websocket import create_connection
import json
ws = create_connection("wss://api2.poloniex.com:443")
ws.send('{"command" : "subscribe", "channel" : 1001}')
while True:
result = ws.recv()
json_result = json.loads(result)
if len(json_result) >= 3:
print(json_result)
ws.close()
因此 trollbox 目前无法在 wamp 网络套接字上运行,您断开连接的原因是由于不活动。
如果你想检查它,你可以查看网站源代码 here 并查看第 2440 行,看到 trollbox 订阅已被注释。
Poloniex trollbox 现已结束! 您可以访问历史记录 here