首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Poloniex推送API

Poloniex推送API
EN

Stack Overflow用户
提问于 2017-07-26 19:35:48
回答 2查看 2.2K关注 0票数 4

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

代码语言:javascript
复制
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. 如果有人能帮我完成订阅和获取代码数据的过程,我会非常感激,我将在python中详细说明,从步骤0开始:我正在Windows上运行Spyder程序。我应该以某种方式激活横梁吗?
  2. 我该怎么戒掉这种联系?我用Ctrl+c简单地终止了这个过程,现在当我试图运行它时,我得到了错误:ReactorNonRestartable
EN

回答 2

Stack Overflow用户

发布于 2017-09-20 01:26:58

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

我发现Poloniex已经撤回了对最初的WAMP套接字端点的支持,所以我可能会完全偏离这个方法。也许这就是你所需要的全部答案,但如果不是,这里是获取代码信息的另一种方式。

最终对我最有用的代码实际上是从你的linked到上面的帖子,但是有一些关于我在其他地方找到的货币对is的信息。

代码语言:javascript
复制
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()

我注释掉了那些你似乎不想要的数据行,但是这里有一些更多的信息来自上一篇文章:

代码语言:javascript
复制
1001 = trollbox (you will get nothing but a heartbeat)
1002 = ticker
1003 = base coin 24h volume stats
1010 = heartbeat
'MARKET_PAIR' = market order books

现在,您应该得到一些如下所示的数据:

代码语言:javascript
复制
[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->通货对映射,或者根据您想要的id解析数据。

或者,一些简单的事情,如:

代码语言:javascript
复制
import urllib
import urllib2
import json

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

将返回您想要的数据,但您必须将其放入循环中以获得不断更新的信息。不确定你的需要,一旦收到的数据,所以我将其余的留给你。

希望这能有所帮助!

票数 3
EN

Stack Overflow用户

发布于 2018-02-16 16:46:23

在其他帖子的帮助下,我编写了以下代码,以便使用Python3.x获取最新数据。我希望这能帮到你:

代码语言:javascript
复制
#TO SAVE THE HISTORICAL DATA (X MINUTES/HOURS) OF EVERY CRYPTOCURRENCY PAIR IN POLONIEX:

    from poloniex import Poloniex
    import pandas as pd
    from time import time
    import os

    api = Poloniex(jsonNums=float)

    #Obtains the pairs of cryptocurrencies traded in poloniex
    pairs = [pair for pair in api.returnTicker()]

    i = 0
    while i < len(pairs):
        #Available candle periods: 5min(300), 15min(900), 30min(1800), 2hr(7200), 4hr(14400), and 24hr(86400)
        raw = api.returnChartData(pairs[i], period=86400, start=time()-api.YEAR*10)
        df = pd.DataFrame(raw)

        # adjust dates format and set dates as index
        df['date'] = pd.to_datetime(df["date"], unit='s')
        df.set_index('date', inplace=True)

        # Saves the historical data of every pair in a csv file
        path=r'C:\x\y\Desktop\z\folder_name'
        df.to_csv(os.path.join(path,r'%s.csv' % pairs[i]))

        i += 1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45335980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档