2016-02-23 3 views
4

Я пытаюсь написать сценарий для общения с онлайн-обменом.
запросы 'Public направляются: https://yobit.net/api/3/
запросы 'Trade' направляются: https://yobit.net/tapi/Проверка аутентификации API в Python (рабочий пример PHP)

Мои общественные запросы работают отлично. Однако мои «частные вызовы» возвращают ошибку 404. Мои ключи на 100% правильны.
Я в настоящее время производят следующий URL: https://yobit.net/tapi/activeorders/ltc_btc/&apikey=MY_APIKEY_HERE&nonce=1456192036

ли я missinterpret документацию? Возможно, ложная структура URL?

Документация Link --->here
Каждый запрос API торговли должен пройти аутентификацию. Аутентификация выполняется путем отправки следующих HTTP-заголовков: Key - API-ключ, пример: FAF816D16FFDFBD1D46EEF5D5B10D8A2 знак - цифровая подпись, POST-параметры (param0 = val0 & ... & = 1 одноразовое значение?), Подписанное секретным ключом через HMAC-SHA512 Параметр nonce (1 минимум до 2147483646 максимум) в последующем запросе должен превышать значение предыдущего. К нулевому nonce необходимо создать новый ключ.

Мой сценарий

class yobit(object): 

def __init__(self, key, secret): 
    self.key = key 
    self.secret = secret 
    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/' 
    elif method in self.trade: 
     url = 'https://yobit.net/tapi/' 
    else: 
     return 'You're doing it wrong' 

    urlString = '' 
    for i, k in values.iteritems(): 
     urlString += k+'/' 

    url += method + '/' + urlString 

    print url 
    if method not in self.public: 
     url += '&apikey=' + self.key 
     url += '&nonce=' + str(int(time.time())) 
     signature = hmac.new(self.secret, url, hashlib.sha512).hexdigest() 
     headers = {'apisign': signature} 
    else: 
     headers = {} 
    print url 

    req = requests.get(url, headers=headers) 
    response = json.loads(req.text) 
    return response 
####### ОБЩЕСТВЕННОГО API
def getinfo(self): 
    return self.query('info') 

def getticker(self, currency): 
    return self.query('ticker', {'currency': currency}) 

def getdepth(self, currency): 
    return self.query('depth', {'currency': currency}) 

def gettrades(self, currency): 
    return self.query('trades', {'currency': currency}) 
##### ТОРГОВЛЕ API
def getactiveorders(self, pair): 
    return self.query('activeorders', {'pair': pair}) 

рабочий пример в PHP
Я считаю, что это рабочий пример PHP, к сожалению, я не могу читать этот язык.

function yobit_api_query2($method, $req = array()) 
{ 
$api_key = ''; 
$api_secret = ''; 

$req['method'] = $method; 
$req['nonce'] = time(); 
$post_data = http_build_query($req, '', '&'); 
$sign = hash_hmac("sha512", $post_data, $api_secret); 
$headers = array(
    'Sign: '.$sign, 
    'Key: '.$api_key, 
); 

$ch = null; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; SMART_API PHP client; '.php_uname('s').'; PHP/'.phpversion().')'); 
curl_setopt($ch, CURLOPT_URL, 'https://yobit.net/tapi/'); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_ENCODING , 'gzip'); 
$res = curl_exec($ch); 
if($res === false) 
{ 
    $e = curl_error($ch); 
    debuglog($e); 
    curl_close($ch); 
    return null; 
} 

curl_close($ch); 

$result = json_decode($res, true); 
if(!$result) debuglog($res); 

return $result; 
} 
+0

ли вы когда-нибудь получить эту работу? –

ответ

2

Я просто понял это сам и наткнулся на ваш вопрос в процессе. Документация YoBit в торговом API немного отсутствует в том, как отформатировать запрос.

Вы хотите сделать POST-запрос конечной точке API и включить все параметры, включая сам метод, в качестве параметров POST. Затем вы подписываете тело запроса (параметры POST) и включаете это вместе с вашим открытым ключом в качестве заголовков HTTP.

Это псевдокод для запроса на Торговую Историю; Я не совсем понимаю Питона. Надеюсь, вы можете расшифровать или кто-то другой может Pythonize!

request_url = "https://yobit.net/tapi"; 
request_body = "method=TradeHistory&pair=ltc_btc&nonce=123"; 
signature = hmac_sha512(request_body,yobit_secret); 
http_headers = { 
    "Content-Type":"application/x-www-form-urlencoded", 
    "Key":yobit_public_key, 
    "Sign":signature 
} 

response = http_post_request(request_url,request_body,http_headers); 
result = json_decode(response.text); 

Update: вот как вы могли бы сделать это в Python 3, используя свой объект в качестве ссылки:

import time,hmac,hashlib,requests,json 
from urllib.parse import urlencode 

class yobit(object): 

def __init__(self, key, secret): 
    self.key = 'KEY' 
    self.secret = b'SECRET' 
    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 
+0

Вам известно, где я могу найти источник? –

+0

Это когда-нибудь работало для всех? Ударьте ту же проблему в скрипте Ruby, всего 404, не erroes? –

Смежные вопросы