Historical ethereum prices - Coinbase API

2019-03-19 12:07发布

Using the python coinbase API-- The functions-- get_buy_price, get_sell_price, get_spot_price, get_historical_data, etc... all seem to return bitcoin prices only. Is there a way of querying Ethereum prices?

It would seem that currency_pair = 'BTC-USD' could be changed to something akin to currency_pair = 'ETH-USD' although this has no effect.

I would expect that the API simply doesn't support this, except that the official documentation explicitly states:

Get the total price to buy one bitcoin or ether

I can work around this somewhat by using the quote='true' flag in the buy/sell request. This however only works moving forward, I would like historical data.

3条回答
神经病院院长
2楼-- · 2019-03-19 12:44

source code will always be your friend.

def get_spot_price(self, **params):
    """https://developers.coinbase.com/api/v2#get-spot-price"""
    if 'currency_pair' in params:
        currency_pair = params['currency_pair']
    else:
        currency_pair = 'BTC-USD'
    response = self._get('v2', 'prices', currency_pair, 'spot', data=params)
    return self._make_api_object(response, APIObject)

def get_historic_prices(self, **params):
    """https://developers.coinbase.com/api/v2#get-historic-prices"""
    response = self._get('v2', 'prices', 'historic', data=params)
    return self._make_api_object(response, APIObject)

We can see that both functions call the same api endpoint. We see that get_spot_price supports the currency_pair argument and passes it as part of the api call. On the other hand get_historic_prices does not.

I wonder what would happen if it did. Let's try it:

from coinbase.wallet.client import Client
from coinbase.wallet.model import APIObject

client = Client(api_key, api_secret)
client._make_api_object(client._get('v2', 'prices', 'ETH-USD', 'historic'), APIObject)


<APIObject @ 0x10dd04938> {
    "currency": "USD",
    "prices": [
        {
          "price": "52.60",
          "time": "2017-03-30T17:03:48Z"
        },
        {
          "price": "52.60",
          "time": "2017-03-30T17:03:38Z"
        },
        {
          "price": "52.54",
          "time": "2017-03-30T17:03:28Z"
        },
        {
          "price": "52.54",
          "time": "2017-03-30T17:03:18Z"
        },
        {
          "price": "52.54",
          "time": "2017-03-30T17:03:08Z"
        },
        {
          "price": "52.53",
          "time": "2017-03-30T17:02:58Z"
        },
        {
          "price": "52.53",
          "time": "2017-03-30T17:02:48Z"
        },
        {
          "price": "52.53",
          "time": "2017-03-30T17:02:38Z"
        },
        {
          "price": "52.53",
          "time": "2017-03-30T17:02:28Z"
        },
        .....

Success!

I'll sent a PR their way. but for now you can use my code snippet.


PR submitted

查看更多
迷人小祖宗
3楼-- · 2019-03-19 12:53

I tried this and had the problem that using a 'currency_pair' parameter together with the 'historic' parameter will produce a history with 1 second granularity for the past few days only.

I solved this by using the GDAX client API instead, together with the GDAX Python client:

Install GDAX Python client:

pip install gdax

Then you can use the public API part even without having a GDAX account:

import gdax

client = gdax.PublicClient()
client.get_product_historic_rates('ETH-USD', granularity=60*60*24)

To get a list of available products (cryptocurrency / FIAT currency pairs), use

client.get_products()

and scan for the id entries.

查看更多
贪生不怕死
4楼-- · 2019-03-19 12:54

Something worked for me with a similar problem calling exchange rates. Try changing the params in

coinbase\wallet\client.py

from

response = self._get('v2', 'prices', 'spot', data=params)

to

response = self._get('v2', 'prices', 'spot', params=params)

查看更多
登录 后发表回答