Перейти к публикации
QweR1ty

отправка запросов к API Poloniex

Рекомендованные сообщения

Друзья, всем привет. Кто делал себе бота для биржи? Решил написать себе бота на delphi. Уже больше суток мучаюсь с этим делом. Вот кусок кода:

 

nonce := FormatDateTime('yyyymmddhhnnsszzz',now);  

post := TStringStream.Create;  

post.WriteString('command=returnBalances&nonce='+ nonce);  

sign:=SHA512DigestToHex(CalcHMAC_SHA512(Secret,post.DataString));  

IdHttp1.Request.CustomHeaders.FoldLines := false;  

idhttp1.Request.CustomHeaders.Values['Key']:=API-Key;  

idhttp1.Request.CustomHeaders.Values['Sign']:=sign;  

Memo1.Text:= idhttp1.Post('https://www.poloniex.com/tradingApi', post);

 

Получаю ответ: {"error":"Invalid command."}

 

Вот сама документация по API - https://poloniex.com/support/api .В документации также есть ссылка на пример кода phyton и php, но этот код не особо понимаю.

 

 В чем может быть проблема? подскажите, пожалуйста :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Команда у тебя должна быть "returnBalances" и все, без всяких "command=returnBalances&nonce="

Изменено пользователем Lordaster

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А как же уникальное целое число? пишут, что оно тоже нужно. У вас уже был опыт написания подобных программ?

Команда у тебя должна быть "returnBalances" и все, без всяких "command=returnBalances&nonce="

Additionally, all queries must include a "nonce" POST parameter. The nonce parameter is an integer which must always be greater than the previous nonce used.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Делал на питоне. Не силен в дельфи, но там передаешь всего два параметра (саму команду и nonce).Вот смотри как это реализовано у меня

def returnAvailableAccountBalances():
    nonce = int(time.time() * 1000)
    parms = {"nonce": nonce,
             "command": 'returnAvailableAccountBalances'}
    parms = urllib.urlencode(parms)

    sign = hmac.new(api_secret, parms, hashlib.sha512).hexdigest()
    headers = {"Sign": sign,
               "Key": api_key,
               }

    public = urllib2.urlopen(urllib2.Request('https://poloniex.com/tradingApi', parms, headers))

    balance = json.loads(public.read())
    return balance

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

Команда у тебя должна быть "returnBalances" и все, без всяких "command=returnBalances&nonce="

Неправильный ответ.  Все нужно.   И вашем коде это есть.   И command и nonce.

 

 

На перле вариант

sub post_polon_api {
  my ($uri, $key, $secret, $params) = @_;

  $req = HTTP::Request->new( 'POST', $uri );
  $req->header( 'Content-Type' => 'application/x-www-form-urlencoded' );
  $req->header( 'Key' => $key );
  $req->header( 'Sign' => hmac_sha512_hex($params, $secret) );
  $req->content( $params );

  my $lwp = LWP::UserAgent->new;
  $lwp->agent("Mozilla/5.0 (Windows NT 6.3; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0");
  return $lwp->request( $req );
  undef $lwp;
};


$method = 'GET';
$command = 'returnAvailableAccountBalances';
$nonce = time;
$params = "nonce=$nonce&method=$method&command=$command";

my $result = post_polon_api($uri,$polon_key,$polon_secret,$params);
$content = $result->content;

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

nonce := FormatDateTime('yyyymmddhhnnsszzz',now);

Возможно у вас проблема с nonce. Потому что целое число - тип Integer может принимать значение до 2^31  = 2 147 483 647

В вашем случае это значение сильно больше.  Попробуйте использовать формат Unix Time в качестве nonce.

Нету делфи под рукой, что-нибудь типа такого напишите http://www.delphisources.ru/pages/faq/base/dt_to_unix_ts.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Возможно у вас проблема с nonce. Потому что целое число - тип Integer может принимать значение до 2^31  = 2 147 483 647

В вашем случае это значение сильно больше.  Попробуйте использовать формат Unix Time в качестве nonce.

Нету делфи под рукой, что-нибудь типа такого напишите http://www.delphisources.ru/pages/faq/base/dt_to_unix_ts.html

nonce имеет тип string, т.е. строка символов.Если я не ошибаюсь, то при POST запросах всегда отправляется текстовые значения. Попробовал присвоить значение nonce ='1', но результат тот же. 

К сожалению, я питон и перл не понимаю, но вроде у вас все аналогично)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

nonce имеет тип string, т.е. строка символов.Если я не ошибаюсь

 

Additionally, all queries must include a "nonce" POST parameter. The nonce parameter is an integer which must always be greater than the previous nonce used.

https://poloniex.com/support/api/

 

Неважно как Вы его храните в коде.  В POST запросе, конечно, это строка.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У вас есть рабочая прога? Сможете через сниффер показать заголовки и post data запроса? Может я забыл какой-то параметр 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

POST / HTTP/1.1
TE: deflate,gzip;q=0.3
Connection: TE, close
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0
Content-Type: application/x-www-form-urlencoded
Key: XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX
Sign: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Content-Length: 50

nonce=1486010106&method=GET&command=returnBalances

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

попробуйте сначала отправить и получить ответ от публичного API, для которого не надо подписи

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
POST / HTTP/1.1
TE: deflate,gzip;q=0.3
Connection: TE, close
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0
Content-Type: application/x-www-form-urlencoded
Key: XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX
Sign: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Content-Length: 50

nonce=1486010106&method=GET&command=returnBalances

нашел отличия. У меня нет параметра 'method=GET'. Спасибо, щас попробую добавить этот параметр

Изменено пользователем QweR1ty

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Попробовал присвоить значение nonce ='1'

в моем коде нонсе = кол-во секунд между текущей датой/временем и 1970.01.01 00:00:00 приведенное к строке (без пробелов)

в следующем запросе разумеется нонсе должно увеличится на некоторое значение

Изменено пользователем antontmn

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

e46btc, добавил параметр. Проблема та же

antontmn, публичные GET запросы работают нормально. Unix время я тоже сегодня пробовал использовать в параметре nonce. Проблему это не решило(

Изменено пользователем QweR1ty

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

В чем может быть проблема? подскажите, пожалуйста

сниферни какой запрос уходит

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@senya2k


есть варианты запроса, когда nonce равно единице, равно Unix time и также пробовал добавить параметр method=GET, но проблема та же


Кто-нибудь писал подобную прогу на Delphi? может с кодировкой что-то? уже не знаю в чем может быть проблема

post-44413-0-74926300-1486019951_thumb.png

post-44413-0-06117300-1486019952_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

может это забыли?

 

 

Content-Type: application/x-www-form-urlencoded
Изменено пользователем antontmn

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

может это забыли?

Казалось бы пустяк, но все заработало. Спасибо огромное :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@QweR1ty, ждем супер_бота )

таких уже полно...хотя кто его знает  :D

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Посмотрел код на перле, после этого более понято стало на дельфи. Интересные конструкции, буду знать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

sign:=SHA512DigestToHex(CalcHMAC_SHA512(Secret,post.DataString));

 

А  SHA512 Вы из какой компоненты/библиотеки получаете?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Уже сам нашел :)
Если вдруг кому понадобится, библиотека Fundamentals Library, потребуется подцепить к проекту последнюю версию Fundamentals Hash, в момент написания, была - 4.00.15
Fundamentals Code Library

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
День добрый

может у кого то есть бот который на поло может стоп лосс + тейк профит поставить? чтобы можно было выставить покупку, если закуп проходит - тогда ставим стоп лосс на некое значение, а дальше по ситуации - если значение достигает тейк профита, то ордер на стоп лосс снимается и сливается по рынку(разумеется если в стакане хватает нужного количества), ну и минимальные настройки на все параметры. Есть вообще такое чудо у кого нибудь? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

    YoBit.Net
×