Python - Poloniex 推送 API

标签 python wamp autobahn poloniex

我正在尝试通过推送 API 从 Poloniex 获取 Python 2.7.13 中的实时数据。 我阅读了很多帖子(包括 How to connect to poloniex.com websocket api using a python library ),我得到了以下代码:

from autobahn.twisted.wamp import ApplicationSession
from autobahn.twisted.wamp import ApplicationRunner
from twisted.internet.defer import inlineCallbacks
import six


class PoloniexComponent(ApplicationSession):
    def onConnect(self):
        self.join(self.config.realm)

    @inlineCallbacks
    def onJoin(self, details):
        def onTicker(*args):
            print("Ticker event received:", args)

        try:
            yield self.subscribe(onTicker, 'ticker')
        except Exception as e:
            print("Could not subscribe to topic:", e)


def main():
    runner = ApplicationRunner(six.u("wss://api.poloniex.com"), six.u("realm1"))
    runner.run(PoloniexComponent)


if __name__ == "__main__":
    main()

现在,当我运行代码时,它看起来运行成功,但我不知道从哪里获取数据。我有两个问题:

  1. 如果有人能指导我完成订阅和获取代码数据的过程,我将不胜感激,我将从第 0 步开始用 python 详细说明:我在 Windows 上的 Spyder 上运行该程序。我应该以某种方式激活 Crossbar 吗?

  2. 如何退出连接?我只是用 Ctrl+c 终止了进程,现在当我尝试再次运行它时,我收到错误:ReactorNonRestartable

最佳答案

我在使用 Poloniex 和 Python2.7 时遇到了很多问题,但最终找到了一个希望对您有所帮助的解决方案。

我发现 Poloniex 已经取消了对原始 WAMP 套接字端点的支持,因此我可能会完全偏离这种方法。也许这就是您需要的全部答案,但如果不是,这里有另一种获取股票信息的方法。

最终最适合我的代码实际上来自您的帖子 linked到上面,但有一些关于我在其他地方找到的货币对 ID 的信息。

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()

我注释掉了拉取您似乎不想要的数据的行,但这里提供了上一篇文章的更多信息以供引用:

1001 = trollbox (you will get nothing but a heartbeat)
1002 = ticker
1003 = base coin 24h volume stats
1010 = heartbeat
'MARKET_PAIR' = market order books

现在你应该得到一些看起来像这样的数据:

[121,"2759.99999999","2759.99999999","2758.000000‌​00","0.02184376","12‌​268375.01419869","44‌​95.18724321",0,"2767‌​.80020000","2680.100‌​00000"]]

这也很烦人,因为开头的“121”是货币对 ID,这没有记录,也没有在此处提到的其他堆栈溢出问题中得到解答。

但是,如果您访问此 url:https://poloniex.com/public?command=returnTicker id 似乎显示为第一个字段,因此您可以创建自己的 id->currency 对映射,或通过您想要的 id 解析数据。

或者,像这样简单的东西:

import urllib
import urllib2
import json

ret = urllib2.urlopen(urllib2.Request('https://poloniex.com/public?command=returnTicker'))
print json.loads(ret.read())

将向您返回所需的数据,但您必须将其置于循环中以获取不断更新的信息。收到数据后不确定您的需求,所以我会把剩下的留给您。

希望这对您有所帮助!

关于Python - Poloniex 推送 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45335980/

相关文章:

python - 高效地为高密度区域创建密度图,为稀疏区域创建点

python - 如何使用 python 重置游戏中的随机选择

php - Apache 不允许从网络上的其他设备访问

wordpress - 下载失败。没有可用的 HTTP 传输可以完成请求的请求

java - WebSocket 消息代理的 Android 客户端

python - 初始化空数组

python - Discord.py 从 DM 获取消息

php - 如何从 wamp 中删除损坏的 mysql 并将单独安装的 mysql 连接到 wamp?

python - Websocket与高速公路的连接和python中的twisted

python - 在同一端口上运行 Flask 和 Autobahn WAMP 服务器