2017-07-26 11 views
4

私は、PoloniexからPush APIを通じてPython 2.7.13でライブデータを取得しようとしています。 私は(How to connect to poloniex.com websocket api using a python library含む)多くの記事を読んで、私は次のコードに到着しました:Python - Poloniex Push 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() 

、私は、コードを実行すると、正常に動いているように、それは見えますが、私は取得していますどこ私は知りませんデータ。私は2つの質問があります:誰かがティッカーのデータをサブスクライブし、取得のプロセスを通じて、私を歩くことができれば、私は私がステップ0から、Pythonで詳しく説明していること、本当に感謝

  1. を:私はスパイダー上でプログラムを実行していますWindows。私は何とかクロスバーを起動するはずですか?

  2. どのように接続を終了しますか?私は単にCtrl+cでプロセスを終了しましたが、今はaganを実行しようとするとエラーが発生します:ReactorNonRestartable

答えて

3

Poloniex with 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」は、通貨ペアのIDであり、これは他のスタックオーバーフローの問題の文書化されていないとも未解決であるため、これも迷惑です

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

参照してください:次のようになりますここに赤い。

しかし、あなたがこの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()) 

はあなたに必要なデータを返しますが、あなたは常に情報を更新取得するループでそれを配置する必要があります。私はあなたに残りを残しますので、データが受信されたらあなたのニーズの確信。

希望すると便利です。

+3

?彼らのAPIドキュメントはそれがそれを使う方法だと主張しています。 – Nate

+0

解決策をありがとう@scott_det!私は@ネイトと同じ質問をして、WAMPに数時間を費やしました。 – FujiApple

0

私は、他の投稿の助けを借りて、Python 3.xを使用して最新のデータを取得するための次のコードを作成しました。私はこれがあなたに役立ちます願っています:あなたは、彼らがWAMPのサポートを引っ張っていることを学びました

#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 
関連する問題