2016-11-21 91 views
0

我正在嘗試使用YoBit api(https://yobit.net/en/api/)與python交易機器人。唯一的問題是我似乎無法弄清楚如何使用私有API進行身份驗證。我想知道是否有人能給我一個對私人YoBit API進行工作調用的例子。我發現了一個帖子裏有人聲稱對Python 3的工作驗證我盡力將其轉換到Python 2.7和想出了這個...如何使用Python 2.7驗證YoBit API?

from urllib2 import Request, urlopen 
from pprint import pprint 
import json 
import time 
import requests 
import hmac 
import hashlib 
from urllib import urlencode 

class yobit(object): 

    def __init__(self, key, secret): 
     self.key = 'mykey' 
     self.secret = b'mysecret' 
     self.public = ['info', 'ticker', 'depth', 'trades'] 
     self.trade = ['activeorders'] 

    def query(self, method, values={}): 
     if method in self.public: 
      url = 'https://yobit.net/api/3/'+method 
      for i, k in values.iteritems(): 
       url += '/'+k 

      req = requests.get(url) 
      return json.loads(req.text) 

     elif method in self.trade: 
      url = 'https://yobit.net/tapi' 
      values['method'] = method 
      values['nonce'] = str(int(time.time())) 
      body = urlencode(values) 
      signature = hmac.new(self.secret, body, hashlib.sha512).hexdigest() 
      headers = { 
       'Content-Type': 'application/x-www-form-urlencoded', 
       'Key': self.key, 
       'Sign': signature 
      } 

      req = requests.post(url,data=values,headers=headers) 
      return json.loads(req.text) 

     return false 


yobit('activeorders','liv_btc') 

然而,這不返回任何東西。

回答

0

將'activeorders'更改爲'ActiveOrders'。 該代碼將正常工作。

self.trade = ['ActiveOrders'] 
0

我有問題,用默認的用戶代理的請求被阻止。這是交易API工作實施:

import hmac 
import hashlib 
import time 
import json 
from urllib.request import urlopen, Request 
from urllib.parse import urlencode 

TRADE_API = 'https://yobit.net/tapi' 


class YobitConnection: 

    def __init__(self, api_key, secret): 
     self.api_key = api_key 
     self.secret = secret 

    def execute_query(self, method, params=None): 
     if params is None: 
      params = {} 
     params['method'] = method 
     params['nonce'] = str(int(time.time())) 
     post_data = urlencode(params).encode() 
     signature = hmac.new(
         self.secret.encode(), 
         post_data, 
         hashlib.sha512).hexdigest() 
     headers = { 
      'Sign': signature, 
      'Key': self.api_key, 
      'User-Agent': "Mozilla/5.0" 
     } 
     request = Request(TRADE_API, post_data, headers=headers) 
     response = urlopen(request) 
     return json.loads(response.read()) 

您可以使用它像這樣:

連接= YobitConnection( 「你的鑰匙」, 「你的祕密」) connection.execute_query( 'ActiveOrders',{ '對': 'eth_btc'})

0

修改如下:

def __init__(self, key, secret): 
     self.key = 'mykey' 
     self.secret = b'mysecret' 
     self.public = ['info', 'ticker', 'depth', 'trades'] 
     self.trade = ['activeorders'] 

def __init__(self, key, secret): 
     self.key = key 
     self.secret = secret 
     self.public = ['info', 'ticker', 'depth', 'trades'] 
     self.trade = ['ActiveOrders'] 

注意的DIFF在self.key , self.secret, self.trade線!

最後一行

yobit('activeorders','liv_btc') 

改變

yb = yobit('your_key','your_secret') 
print yb.execute_query('ActiveOrders', {'pair': 'eth_btc'}) 

通知中的上述your_key, your_secret可以從yobit.net用戶中心獲取。

我已經做了上述改變,並測試它工作正常。 正常情況下,您可以得到如下輸出:

{ 
    "success": 1 
}