将API连接到kdb数据库

时间:2017-11-17 16:17:09

标签: python python-3.x kdb

简单的问题 - 我已经使用Python 3.6成功连接到Coinbase API并在我的控制台中接收BTC买/卖价格。

我想将它连接到kdb数据库并开始创建一个滴答数据的HDB但我对如何构建这个设置感到有点困惑,即将get请求推送到数据库进行存储。我的python代码看起来像......

api_key = 'XXXXX'
api_secret = 'XXXXX'
from coinbase.wallet.client import Client
import time, requests


client = Client(api_key, api_secret)


starttime = time.time()
while True:
    buy_price = client.get_buy_price(currency_pair = 'BTC-USD')
    sell_price = client.get_sell_price(currency_pair = 'BTC-USD')
    time.sleep(10.0)
    print(buy_price)
    print(sell_price)
    print("=-=-=-=-=-=")

控制台打印Feed,看起来像......

{
  "amount": "8034.79",
  "base": "BTC",
  "currency": "USD"
}
{
  "amount": "7875.67",
  "base": "BTC",
  "currency": "USD"
}
=-=-=-=-=-=
{
  "amount": "8034.80",
  "base": "BTC",
  "currency": "USD"
}
{
  "amount": "7875.97",
  "base": "BTC",
  "currency": "USD"
}
=-=-=-=-=-=

在本地存储此数据的任何指导都会有所帮助。如果您需要任何其他信息,请与我们联系。

提前谢谢!

2 个答案:

答案 0 :(得分:5)

您可以使用PyQ

>>> from pyq import q
>>> p = {
...   "amount": "8034.79",
...   "base": "BTC",
...   "currency": "USD"
... }
>>> q.set(':x', [p])
k('`:x')
>>> q.upsert(':x', p)
k('`:x')
>>> q.get(':x').show()
amount  base currency
---------------------
8034.79 BTC  USD
8034.79 BTC  USD

答案 1 :(得分:4)

对于像Coinbase这样的简单API,您可以非常简单地直接在KDB中下载数据,使用.Q.hg进行下载,使用.j.k来解析JSON。例如,这是一个示例“feedhandler”:

/q feed.q [host]:port[:user:pwd]
\t 30000

h:hopen `$":",$[count .z.x;.z.x 0;":6000"]; //open handle to TP, use first arg or default to :6000

//define timer function to run every 30 seconds & retrieve prices, send to TP
.z.ts:{
  a:{@[(.j.k .Q.hg`$":https://api.coinbase.com/v2/prices/BTC-USD/",x)`data;`typ;:;x]}'[("buy";"sell";"spot")];
  t:select time:1#.z.N,sym:first `$(base,'currency),
           bid: "F"$first amount where typ like "sell",
           ask: "F"$first amount where typ like "buy" ,
           spot:"F"$first amount where typ like "spot"
  from a;
  h(`.u.upd;`btc;get first t);
 }

此脚本使用KDB计时器每30秒运行一次(您可以调整第一行的频率 - 当前为30000毫秒)&下载买,卖&来自Coinbase API的现货价格,并将它们发送给tickerplant(在加载脚本时将端口指定为第一个参数,或默认为端口6000)。结果表如下所示:

:3002>btc
time                          sym    bid     ask     spot
------------------------------------------------------------
2017.11.20D21:32:48.697085000 BTCUSD 8164.23 8329.17 8246.5
2017.11.20D21:33:20.376192000 BTCUSD 8164.27 8331.69 8246.5
2017.11.20D21:33:50.709364000 BTCUSD 8164.27 8331.69 8247.27
2017.11.20D21:34:21.544488000 BTCUSD 8166.71 8331.69 8249

tick.q(默认名称sym.q)的架构应如下所示:

btc:([]time:`timespan$(); sym:`g#`symbol$(); bid:`float$(); ask:`float$(); spot:`float$())

需要注意的一点是,由于此API使用HTTPS,您需要设置SSL证书,您可以这样做(来自code.kx.com):

$ curl https://curl.haxx.se/ca/cacert.pem > $HOME/certs/cabundle.pem
$ export SSL_CA_CERT_FILE=$HOME/certs/cabundle.pem

我还制作了这个脚本的一个版本,它集成了TorQ,AquaQ Analytics发布的免费KDB框架(免责声明:我为AquaQ工作)。该版本可在此处获取:

https://github.com/jonathonmcmurray/TorQ-Coinbase

此版本包含一个启动脚本,可下载必要的SSL证书并按上述方法设置SSL_CA_CERT_FILE。此设置允许您启动一组进程(tickerplant,rdb,hdb等)进行处理和处理。存储从Feed返回的数据。