我正在尝试通过推送 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()
现在,当我运行代码时,看起来它运行成功了,但我不知道我从哪里获取数据。我有两个问题:
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.00000000","0.02184376","12268375.01419869","4495.18724321",0,"2767.80020000","2680.10000000"]]
这也很烦人,因为开头的“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/