emmtte / list

Google Sheets automatic creation with Google Apps Script (GAS) for managing a cryptocurrency tracking spreadsheet with multi exchanges
262 stars 77 forks source link

Bitstamp.js #15

Closed Popcaughan closed 6 years ago

Popcaughan commented 6 years ago

Thanks for looking at this one, I gave it a go and got the following error:

Request failed for http://www.bitstamp.net/api/v2/balance/?key=CORRECT API KEY WAS HERE &signature=LONG STRING SIGNATURE WAS HERE&nonce=1516333128 returned code 400. Truncated server response: POST Only Endpoint (use muteHttpExceptions option to examine full response)

Happy to help test this and here's my (probably terrible) string manipulation code ready to go to pull the results into an array: function Bitstamp() { //insert api code here var data = JSON.parse(response.getContentText()); var json1 = JSON.stringify(data);
parseStampPrices(json1); }

function parseStampPrices(textString ){

var stringLength = textString.length;

if(stringLength > 80){

var balanceLocation = nthIndex(textString, "balance", 1);
var feeLocation = nthIndex(textString, "fee", 1);
var coinCode = textString.substring(balanceLocation-4, balanceLocation-1);

textString = textString.substring(balanceLocation, textString.length);

var first = nthIndex(textString, "\"", 2);
var second = nthIndex(textString, "\"", 3);
var value = textString.substring(first+1, second);
value =+ value;

if(value == 0){

  textString = textString.substring(feeLocation, textString.length);
  parseStampPrices(textString);

}
else{ 
  coinCode = coinCode.toUpperCase();

  if(coinCode == "USD"){
    coinCode = "USDT";
  }

  textString = textString.substring(feeLocation, textString.length);   
  myArray.push({'currency': coinCode, 'balance': value, 'market': "Bitstamp"});
  parseStampPrices(textString);
}

}

}

// This method is used as part of parsing the Bitstamp info function nthIndex(str, pat, n){ var L= str.length, i= -1; while(n-- && i++<L){ i= str.indexOf(pat, i); if (i < 0) break; } return i; }

emmtte commented 6 years ago

updated, please try

Popcorn2018 commented 6 years ago

No joy, sorry.

SyntaxError: Unexpected token: P (line 31, file "Stamp")

When I Logger.log(response); the log says "POST Only Endpoint"

When I Logger.log(options) the log says: "method=post, payload=key=MY API KEY&signature=94,113,68,-68,28,72,-1,-3,41,33,-2,58,-102,-113,-95,-71,47,25,-55,-34,95,-33,-125,28,22,-91,-61,89,103,20,-62,102&nonce=13 digit number here

I have changed some of the numbers in the signature.

When I tried to hire a guy on Fiverr to do this for me he said that "bitstamp and cryptopia use another kind of algorithm with is not supported on google scripts for now" so maybe this script needs to look more like the cryptopia one?

emmtte commented 6 years ago

Not good for signature it' should be HEX number. I need to open an account and doing more test before post code

emmtte commented 6 years ago

Finally found (I hope because not yet an account) Please try again (V0.3) Thanks for your support

Popcorn2018 commented 6 years ago

Still the same, sorry:

Options logs as: {method=post, payload=key=API KEY &signature=20FA4834E564A56CCBC6E3A94D7D6391D123BAE25984378581D76172AF587F03&nonce=1516496033795, muteHttpExceptions=true} Response logs as: POST Only Endpoint

And the script gives the error: SyntaxError: Unexpected token: P

Popcorn2018 commented 6 years ago

Hi, have you had a chance to look at this? I can provide you with API details if you need some to test with.

emmtte commented 6 years ago

Hi, no way at this moment. found this : https://github.com/blacksun1/google-scripts-bitstamp-api need to work on it

emmtte commented 6 years ago

updated, just changed var url = "http://www.bitstamp.net/api/v2/balance/" by var url = "http://www.bitstamp.net/api/balance/" please try again

Popcorn2018 commented 6 years ago

No joy. Options logs as: {method=post, payload=key=MYAPIKEYHERE&signature=51D0F5FDAF1234567898765432142233949A680CFF0C73C19414EEF&nonce=1518207217, muteHttpExceptions=true}

Response logs as: {"error": "Missing key, signature and nonce parameters"}

I'll have a look at that other script and maybe see if I can pay someone on fiverr to crack this one for us.

Popcorn2018 commented 6 years ago

That script requires crypto-js's hmac 256 api, but the link provided on that git doesn't work anymore so I'm not sure where to get that from. Would be good if it worked with the same jsSHA that you're using but this line throws an error:

return CryptoJS.HmacSHA256(message, this.secret).toString().toUpperCase();
emmtte commented 6 years ago

I think we are really near a solution, the problem come from the end of the code

var url = "http://www.bitstamp.net/api/balance/"
cb = "key=" + key + "&signature=" + signature + "&nonce=" + nonce;

//var options = { method: 'post' };

var options = {
  "method" : "post",
  "payload": cb,
  "muteHttpExceptions" : true
 };

var response = UrlFetchApp.fetch (url, options);
var data = JSON.parse(response.getContentText());   
emmtte commented 6 years ago

updated try again

Popcorn2018 commented 6 years ago

No sorry... The new code still gives "POST Only Endpoint"

Swapping the url to http://www.bitstamp.net/api/balance/ gives {"error": "Missing key, signature and nonce parameters"}

Sorry!

jelbazi commented 6 years ago

I fixed the issue @Popcorn2018 & @ManuCart (see link).

Also added conversion to correct input format for main.js.

emmtte commented 6 years ago

Well done! Merged Hope found the solution. Thanks @jelbazi