mahendrakalkura / diffusion

12 stars 6 forks source link

How to solve this? #2

Open NikosVlagoidis opened 6 years ago

NikosVlagoidis commented 6 years ago

I get this error. Do you have any clue?

2018-03-10T21:01:01+0000 Unhandled Error
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/twisted/python/log.py", line 103, in callWithLogger
    return callWithContext({"system": lp}, func, *args, **kw)
  File "/usr/local/lib/python2.7/dist-packages/twisted/python/log.py", line 86, in callWithContext
    return context.call({ILogContext: newCtx}, func, *args, **kw)
  File "/usr/local/lib/python2.7/dist-packages/twisted/python/context.py", line 122, in callWithContext
    return self.currentContext().callWithContext(ctx, func, *args, **kw)
  File "/usr/local/lib/python2.7/dist-packages/twisted/python/context.py", line 85, in callWithContext
    return func(*args,**kw)
--- <exception caught here> ---
  File "/usr/local/lib/python2.7/dist-packages/twisted/internet/posixbase.py", line 597, in _doReadOrWrite
    why = selectable.doRead()
  File "/usr/local/lib/python2.7/dist-packages/twisted/internet/tcp.py", line 208, in doRead
    return self._dataReceived(data)
  File "/usr/local/lib/python2.7/dist-packages/twisted/internet/tcp.py", line 214, in _dataReceived
    rval = self.protocol.dataReceived(data)
  File "/usr/local/lib/python2.7/dist-packages/twisted/protocols/tls.py", line 330, in dataReceived
    self._flushReceiveBIO()
  File "/usr/local/lib/python2.7/dist-packages/twisted/protocols/tls.py", line 295, in _flushReceiveBIO
    ProtocolWrapper.dataReceived(self, bytes)
  File "/usr/local/lib/python2.7/dist-packages/twisted/protocols/policies.py", line 120, in dataReceived
    self.wrappedProtocol.dataReceived(data)
  File "/usr/local/lib/python2.7/dist-packages/autobahn/twisted/websocket.py", line 131, in dataReceived
    self._dataReceived(data)
  File "/usr/local/lib/python2.7/dist-packages/autobahn/websocket/protocol.py", line 1175, in _dataReceived
    self.consumeData()
  File "/usr/local/lib/python2.7/dist-packages/autobahn/websocket/protocol.py", line 1187, in consumeData
    while self.processData() and self.state != WebSocketProtocol.STATE_CLOSED:
  File "/usr/local/lib/python2.7/dist-packages/autobahn/websocket/protocol.py", line 1553, in processData
    fr = self.onFrameEnd()
  File "/usr/local/lib/python2.7/dist-packages/autobahn/websocket/protocol.py", line 1674, in onFrameEnd
    self._onMessageEnd()
  File "/usr/local/lib/python2.7/dist-packages/autobahn/twisted/websocket.py", line 159, in _onMessageEnd
    self.onMessageEnd()
  File "/usr/local/lib/python2.7/dist-packages/autobahn/websocket/protocol.py", line 627, in onMessageEnd
    self._onMessage(payload, self.message_is_binary)
  File "/usr/local/lib/python2.7/dist-packages/autobahn/twisted/websocket.py", line 162, in _onMessage
    self.onMessage(payload, isBinary)
  File "/root/diffusion/modules/diffusion.py", line 208, in onMessage
    self.factory.message_handler.post_message(DiffusionMessage(type, topic, body, headers))
  File "/root/diffusion/modules/diffusion.py", line 112, in post_message
    log.msg('received message: %s' % diffusion_message)
  File "/root/diffusion/modules/diffusion.py", line 143, in __str__
    return unicode(self).encode('ascii', 'replace')
exceptions.UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 87234: ordinal not in range(128)
mahendrakalkura commented 6 years ago

Are you able to reproduce this error consistently?

xtonousou commented 6 years ago

@NikosVlagoidis try removing this mehod from DiffusionMessage class. Finally, use Python 2.

NikosVlagoidis commented 6 years ago

Something happend with ascii encodeing.

I replaced this code

    def __repr__(self):
        return '{}({}, {}, {}, {})'.format(self.__class__.__name__, self.type, self.topic, self.body, self.headers)

    def __str__(self):
        try:
            return unicode(self).encode('ascii', 'replace')
        except:
            resp = [self.body]
            return '~~~'.join(str(s) for s in resp)

    def __unicode__(self):
        return '{} {} {} {}'.format(self.type, self.topic, self.body, self.headers)
NikosVlagoidis commented 6 years ago

I saw the other closed issue that you had the js code to parse the data from the websocket. Where did you found it? Do you have any lib or module to parse data in python?

mahendrakalkura commented 6 years ago

Where did you found it?

I found it on their website.

Do you have any lib or module to parse data in python?

No, nothing outside this library. It was planned as a low level interface, nothing more.

NikosVlagoidis commented 6 years ago

I see they have an iframe with betslip.js but it is different than yours. fewer lines. And I cannot figure out how to parse the data.

mahendrakalkura commented 6 years ago

Bet365 or William Hill?

NikosVlagoidis commented 6 years ago

bet 365.

mahendrakalkura commented 6 years ago

I see they have an iframe with betslip.js but it is different than yours.

You have to undo their minification. You can use this tool: http://jsnice.org/

NikosVlagoidis commented 6 years ago

the minified is not actually the problem. I found that mine is 12k lines of code. Can you explain the process of decoding the data using this javascript file? Should I use node? The file seems huge and since I am not familiar with JS I can't figure it out.

mahendrakalkura commented 6 years ago

The file seems huge and since I am not familiar with JS I can't figure it out.

I can't help you in this case. I just read through it and extracted whatever I wanted.