Add support for tiingo crypto endpoints to TiingoClient

This commit is contained in:
n1rna
2019-10-13 00:28:57 +03:30
parent 5490a3c85c
commit 7935168ade

View File

@@ -144,7 +144,7 @@ class TiingoClient(RestClient):
is_valid = self._is_eod_frequency(frequency) or re.match(self._frequency_pattern, frequency)
return not is_valid
def _get_url(self, ticker, frequency):
def _get_price_url(self, ticker, frequency):
"""
Return url based on frequency. Daily, weekly, or yearly use Tiingo
EOD api; anything less than daily uses the iex intraday api.
@@ -178,7 +178,7 @@ class TiingoClient(RestClient):
fmt (string): 'csv' or 'json'
frequency (string): Resample frequency
"""
url = self._get_url(ticker, frequency)
url = self._get_price_url(ticker, frequency)
params = {
'format': fmt if fmt != "object" else 'json', # conversion local
'resampleFreq': frequency
@@ -245,7 +245,7 @@ class TiingoClient(RestClient):
if pandas_is_installed:
if type(tickers) is str:
stock = tickers
url = self._get_url(stock, frequency)
url = self._get_price_url(stock, frequency)
response = self._request('GET', url, params=params)
df = pd.DataFrame(response.json())
if metric_name is not None:
@@ -258,7 +258,7 @@ class TiingoClient(RestClient):
else:
prices = pd.DataFrame()
for stock in tickers:
url = self._get_url(stock, frequency)
url = self._get_price_url(stock, frequency)
response = self._request('GET', url, params=params)
df = pd.DataFrame(response.json())
df.index = df['date']
@@ -331,3 +331,66 @@ class TiingoClient(RestClient):
return data
elif fmt == 'object':
return dict_to_object(data, "BulkNews")
# Crypto
# tiingo/crypto
def get_crypto_top_of_book(self, tickers=[],
endDate=None, exchanges=[],
includeRawExchangeData=False, convertCurrency=None):
url = 'https://api.tiingo.com/tiingo/crypto/top'
params = {
'tickers': ','.join(tickers)
}
if endDate:
params['endDate'] = endDate
if len(exchanges):
params['exchanges'] = ','.join(exchanges)
if includeRawExchangeData is True:
params['includeRawExchangeData'] = True
if convertCurrency:
params['convertCurrency'] = convertCurrency
response = self._request('GET', url, params=params)
return response.json()
def get_crypto_price_history(self, tickers=[], baseCurrency=None,
startDate=None, endDate=None, exchanges=[],
consolidateBaseCurrency=False, includeRawExchangeData=False,
resampleFreq=None, convertCurrency=None):
url = 'https://api.tiingo.com/tiingo/crypto/prices'
params = {
'tickers': ','.join(tickers)
}
if startDate:
params['startDate'] = startDate
if endDate:
params['endDate'] = endDate
if len(exchanges):
params['exchanges'] = ','.join(exchanges)
if consolidateBaseCurrency is True:
params['consolidateBaseCurrency'] = ','.join(consolidateBaseCurrency)
if includeRawExchangeData is True:
params['includeRawExchangeData'] = ','.join(includeRawExchangeData)
if resampleFreq:
params['resampleFreq'] = resampleFreq
if convertCurrency:
params['convertCurrency'] = convertCurrency
response = self._request('GET', url, params=params)
return response.json()
def get_crypto_meta_data(self, tickers=[], fmt='json'):
url = 'https://api.tiingo.com/tiingo/crypto'
params = {
'tickers': ','.join(tickers),
'format': fmt,
}
response = self._request('GET', url, params=params)
if fmt == 'csv':
return response.content.decode("utf-8")
else:
return response.json()