How to connect to poloniex.com websocket api using a python library

前端 未结 4 2117
被撕碎了的回忆
被撕碎了的回忆 2020-12-07 17:16

I am trying to connect to wss://api.poloniex.com and subscribe to ticker. I can\'t find any working example in python. I have tried to use autobahn/twisted and websocket-cli

相关标签:
4条回答
  • 2020-12-07 17:29

    This uses the undocumented websocket endpoint because Poloniex has pulled support for the original WAMP socket endpoint.

    import websocket
    import thread
    import time
    import json
    
    def on_message(ws, message):
        print(message)
    
    def on_error(ws, error):
        print(error)
    
    def on_close(ws):
        print("### closed ###")
    
    def on_open(ws):
        print("ONOPEN")
        def run(*args):
            ws.send(json.dumps({'command':'subscribe','channel':1001}))
            ws.send(json.dumps({'command':'subscribe','channel':1002}))
            ws.send(json.dumps({'command':'subscribe','channel':1003}))
            ws.send(json.dumps({'command':'subscribe','channel':'BTC_XMR'}))
            while True:
                time.sleep(1)
            ws.close()
            print("thread terminating...")
        thread.start_new_thread(run, ())
    
    
    if __name__ == "__main__":
        websocket.enableTrace(True)
        ws = websocket.WebSocketApp("wss://api2.poloniex.com/",
                                  on_message = on_message,
                                  on_error = on_error,
                                  on_close = on_close)
        ws.on_open = on_open
        ws.run_forever()
    

    The channels are:

    1001 = trollbox (you will get nothing but a heartbeat)
    1002 = ticker
    1003 = base coin 24h volume stats
    1010 = heartbeat
    'MARKET_PAIR' = market order books
    
    0 讨论(0)
  • 2020-12-07 17:35

    Meanwhile poloniex changed the ticker API, so now it returns a symbol-id instead of a name, so maybe someone will find this useful:

    7: BTC_BCN
    8: BTC_BELA
    10: BTC_BLK
    12: BTC_BTCD
    13: BTC_BTM
    14: BTC_BTS
    15: BTC_BURST
    20: BTC_CLAM
    24: BTC_DASH
    25: BTC_DGB
    27: BTC_DOGE
    28: BTC_EMC2
    31: BTC_FLDC
    32: BTC_FLO
    38: BTC_GAME
    40: BTC_GRC
    43: BTC_HUC
    50: BTC_LTC
    51: BTC_MAID
    58: BTC_OMNI
    61: BTC_NAV
    63: BTC_NEOS
    64: BTC_NMC
    69: BTC_NXT
    73: BTC_PINK
    74: BTC_POT
    75: BTC_PPC
    83: BTC_RIC
    89: BTC_STR
    92: BTC_SYS
    97: BTC_VIA
    98: BTC_XVC
    99: BTC_VRC
    100: BTC_VTC
    104: BTC_XBC
    108: BTC_XCP
    112: BTC_XEM
    114: BTC_XMR
    116: BTC_XPM
    117: BTC_XRP
    121: USDT_BTC
    122: USDT_DASH
    123: USDT_LTC
    124: USDT_NXT
    125: USDT_STR
    126: USDT_XMR
    127: USDT_XRP
    129: XMR_BCN
    130: XMR_BLK
    131: XMR_BTCD
    132: XMR_DASH
    137: XMR_LTC
    138: XMR_MAID
    140: XMR_NXT
    148: BTC_ETH
    149: USDT_ETH
    150: BTC_SC
    151: BTC_BCY
    153: BTC_EXP
    155: BTC_FCT
    158: BTC_RADS
    160: BTC_AMP
    162: BTC_DCR
    163: BTC_LSK
    166: ETH_LSK
    167: BTC_LBC
    168: BTC_STEEM
    169: ETH_STEEM
    170: BTC_SBD
    171: BTC_ETC
    172: ETH_ETC
    173: USDT_ETC
    174: BTC_REP
    175: USDT_REP
    176: ETH_REP
    177: BTC_ARDR
    178: BTC_ZEC
    179: ETH_ZEC
    180: USDT_ZEC
    181: XMR_ZEC
    182: BTC_STRAT
    183: BTC_NXC
    184: BTC_PASC
    185: BTC_GNT
    186: ETH_GNT
    187: BTC_GNO
    188: ETH_GNO
    189: BTC_BCH
    190: ETH_BCH
    191: USDT_BCH
    192: BTC_ZRX
    193: ETH_ZRX
    194: BTC_CVC
    195: ETH_CVC
    196: BTC_OMG
    197: ETH_OMG
    198: BTC_GAS
    199: ETH_GAS
    200: BTC_STORJ
    
    0 讨论(0)
  • 2020-12-07 17:42

    Currently, Twisted doesn't properly use the Windows trust store. So the verification of the TLS certificate will fail. To work around this until either Twisted or Autobahn includes a workaround, you can:

    • install certifi module (pip install certifi)
    • set SSL_CERT_FILE, like export SSL_CERT_FILE="$(python -m certifi)"
    0 讨论(0)
  • 2020-12-07 17:49

    What you are trying to accomplish can be done by using WAMP, specifically by using the WAMP modules of the autobahn library (that you are already trying to use).

    After following their docs, I managed to set-up a simple example using autobahn and asyncio. The following example subscribes to the 'ticker' feed and prints the received values:

    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 onTicker(*args):
                print("Ticker event received:", args)
    
            try:
                yield from self.subscribe(onTicker, 'ticker')
            except Exception as e:
                print("Could not subscribe to topic:", e)
    
    
    def main():
        runner = ApplicationRunner("wss://api.poloniex.com:443", "realm1")
        runner.run(PoloniexComponent)
    
    
    if __name__ == "__main__":
        main()
    

    You can find more details about WAMP programming with autobahn here: http://autobahn.ws/python/wamp/programming.html

    0 讨论(0)
提交回复
热议问题