Чтение сообщений на 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()

person sunwarri0r    schedule 24.02.2017    source источник


Ответы (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()
person sunwarri0r    schedule 10.04.2017
comment
вы можете посмотреть исходный код веб-сайта здесь и посмотреть на строку 2294 и увидеть, что подписка на троллбокс комментируется. - person Cfir TSabari; 12.06.2017

Вы можете проверить этот код здесь, который я сделал: здесь. Он использует красивый суп и сухой пейзаж. Он получает его, заходя на сайт 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")
person Z3br3    schedule 05.04.2017
comment
Благодарю вас! К сожалению, я не могу заставить работать сухой скребок, но я нашел новое и лучшее решение. Смотрите мой ответ ниже. - person sunwarri0r; 10.04.2017

поэтому trollbox сейчас не работает в веб-сокете wamp, причина, по которой вы получаете отключение, связана с бездействием.

если вы хотите проверить это, вы можете посмотреть исходный код веб-сайта здесь и посмотреть в строке 2440 и видим, что подписка на trollbox закомментирована.

person Cfir TSabari    schedule 11.06.2017

Троллбокс Poloniex закончился! Вы можете получить доступ к истории здесь

person A STEFANI    schedule 26.11.2017