Чтение сообщений на Poloniex Trollbox с Python autbahn или другим модулем сокетов?
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 ответа
Вот решение:
Эти пропущенные сообщения могут иногда случаться с WAMP API
, Это связано с внутренними проблемами масштабируемости программного обеспечения маршрутизации, и Poloniex работает над pure WebSockets API
(в настоящее время используется веб-интерфейсом, но отсутствует документация) для его замены. 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()
Троллбокс Poloniex закончился! Вы можете получить доступ к истории здесь
Вы можете проверить этот код здесь, я сделал: Здесь. Он использует Красивый суп и сухой пейзаж. Он получает это, заходя на веб-сайт Poloniex и ожидая некоторое время, затем собирает данные с веб-сайта, в нашем случае Trollbox. Я также попробовал с autobahn, и это то, что я получил, но он выглядит точно так же, как ваш код, так что, вероятно, улучшения не будет.
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")
Таким образом, trollbox не работает прямо сейчас на веб-сокете Wamp, причина, по которой вы получаете отключение, происходит из-за неактивности.
Если вы хотите проверить это, вы можете посмотреть на источник веб-сайта здесь и посмотреть на строку 2440 и увидеть, что подписка на trollbox прокомментирована.