2017-12-06 3 views
1

と呼ばれるエンドポイントがBittrex Apiにあります。Bittrex Apiは通貨を文字列として取り、その通貨の現在の残高を返します。関数内の要求、関数を実行中に要求がエラーを返すのはなぜですか?

balance = get_balance('BTC')  

要求リターンを行う場合:

{ 'メッセージ': 'INVALID_SIGNATURE'、
'結果':なし、
'成功':偽}

機能:

def get_balance(currency): 
    endpoint = '/account/getbalance' 
    params = { 
     'currency' : currency 
    } 
    return call_endpoint(endpoint, False, params) 

call_endpoint:

def call_endpoint(endpoint, isPublic, params = None): 
    base_url = 'https://bittrex.com/api/v1.1' 
    url = (base_url + endpoint + 
     '?apikey=' + API_KEY + 
     '&nonce=' + str(time.time())).encode('utf-8') 
    signature = hmac.new(SECRET_KEY, url, hashlib.sha512).hexdigest() 
    headers = {'apisign' : signature} 
    r = requests.get(url, headers = headers, params=params) 
    return r 

私は、関数の外にそれを要求した場合しかし、:

url = ('https://bittrex.com/api/v1.1/account/getbalance' + 
    '?apikey=' + API_KEY + 
    '&nonce=' + str(time.time()) + 
    '&currency=BTC').encode('utf-8') 
signature = hmac.new(SECRET_KEY, url, hashlib.sha512).hexdigest() 
headers = {'apisign' : signature} 
r = requests.get(url, headers = headers) 

それが動作します。

{ 'メッセージ': ''、
'結果':{ '利用可能':
...、
'成功':真}

これらの2つのアプローチを持っています同じコードなので、Python関数やこのエラーの原因となるリクエストライブラリについては何かありますか?

+0

違いは、関数内でparams.pleaseを削除(引数)して試してみることです。 – chakri

+0

URLは2つのケースで異なります。 1つは通貨を含み、もう1つは通貨を含まない。それは計算された署名に影響しますが、それがこの特定のAPIのために違いを生むかどうかはわかりません。 (あなたの呼び出しが 'get_balance(" BTC ")'または同等のものであると仮定しています) – chepner

+0

私は最初の呼び出しを表示するためにそれを編集しました。 –

答えて

1

これらの2つのアプローチは同じことをしません。

あなたcall_endpoint関数はcurrency PARAMせずにURLの入力にヘッダの署名を計算し、次いでcurrency PARAMにrequestsアドインを有します。

他のスニペットは、currencyパラメータを含むURLの署名を計算します。

関連する問題