2017-07-26 63 views
4

我想通過推送API從Poloniex獲取Python 2.7.13中的實時數據。 我看了很多帖子(包括How to connect to poloniex.com websocket api using a python library)和我到達下面的代碼:Python - Poloniex推送API

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的過程:我上的Spyder上運行的程序視窗。我應該以某種方式激活Crossbar?

  2. 如何退出連接?我簡單地用Ctrl+c殺死了這個進程,現在當我嘗試運行它時,出現錯誤:ReactorNonRestartable

回答

3

我遇到了很多使用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,這是未記錄也是在其他堆棧溢出問題解答參考紅到這裏。

但是,如果您訪問此網址:https://poloniex.com/public?command=returnTicker它似乎是第一個字段顯示的ID,所以您可以創建自己的id->貨幣對映射或通過您想要的id從數據解析數據。

另外,一些簡單的:

import urllib 
import urllib2 
import json 

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

會回報給你你想要的數據,但你必須把它在一個循環中得到不斷更新的信息。一旦收到數據,就不知道你的需求,所以我會把剩下的東西留給你。

希望這會有所幫助!

+3

你從哪裏知道他們正在拉動WAMP支持?他們的API文檔仍然聲稱這是使用它的方式。 – Nate

+0

感謝解決方案@scott_det!我有和@Nate一樣的問題,在WAMP上浪費了幾個小時。 – FujiApple

0

我在其他文章的幫助下,使用下面的代碼來獲取使用Python 3.x的最新數據。我希望這可以幫助你:

#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