2

Poloniex 不会将每条消息都返回到我的套接字。我使用以下代码阅读消息,有时会收到连续的消息编号,但有时会丢失 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()
4

4 回答 4

6

这是解决方案:

这些丢失的消息有时可能会发生在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()
于 2017-04-10T09:09:14.133 回答
0

你可以在这里查看我制作的这段代码:这里。它使用美丽的汤和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")
于 2017-04-05T05:41:24.543 回答
0

Poloniex trollbox 现已结束!您可以在此处访问历史记录

于 2017-11-26T17:30:32.703 回答
0

因此,trollbox 现在无法在 wamp Web 套接字上运行,您断开连接的原因是由于不活动。

如果您想检查它,您可以查看网站源代码here并查看第 2440 行并查看 trollbox 订阅已被评论。

于 2017-06-11T16:25:28.557 回答