Difference between revisions of "Node.js Example"

From Bitcoin Wiki
Jump to: navigation, search
(Created page with " <source lang="javascript"> var querystring = require('querystring'), https = require('https'), crypto = require('crypto'); function MtGoxClient(key, secret) ...")
 
(adding content length to keep compatibility)
 
Line 35: Line 35:
 
                         'Rest-Sign': hmac.digest('base64'),
 
                         'Rest-Sign': hmac.digest('base64'),
 
                         'User-Agent': 'Mozilla/4.0 (compatible; MtGox node.js client)',
 
                         'User-Agent': 'Mozilla/4.0 (compatible; MtGox node.js client)',
                         'Content-type': 'application/x-www-form-urlencoded'
+
                         'Content-type': 'application/x-www-form-urlencoded',
 +
                        'Content-Length': post.length
 
                 }
 
                 }
 
         };
 
         };

Latest revision as of 00:48, 8 March 2013

var querystring = require('querystring'),
        https = require('https'),
        crypto = require('crypto');

function MtGoxClient(key, secret) {
        this.key = key;
        this.secret = secret;
}

MtGoxClient.prototype.query = function(path, args, callback) {
        var client = this;

        // if no args or invalid args provided, just reset the arg object
        if (typeof args != "object") args = {};

        // generate a nonce
        args['nonce'] = (new Date()).getTime() * 1000;
        // compute the post data
        var post = querystring.stringify(args);
        // compute the sha512 signature of the post data
        var hmac = crypto.createHmac('sha512', new Buffer(client.secret, 'base64'));
        hmac.update(post);

        // this is our query
        var options = {
                host: 'mtgox.com',
                port: 443,
                path: '/api/' + path,
                method: 'POST',
                agent: false,
                headers: {
                        'Rest-Key': client.key,
                        'Rest-Sign': hmac.digest('base64'),
                        'User-Agent': 'Mozilla/4.0 (compatible; MtGox node.js client)',
                        'Content-type': 'application/x-www-form-urlencoded',
                        'Content-Length': post.length
                }
        };

        // run the query, buffer the data and call the callback
        var req = https.request(options, function(res) {
                res.setEncoding('utf8');
                var buffer = '';
                res.on('data', function(data) { buffer += data; });
                res.on('end', function() { if (typeof callback == "function") { callback(JSON.parse(buffer)); } });
        });

        // basic error management
        req.on('error', function(e) {
                console.log('warning: problem with request: ' + e.message);
        });

        // post the data
        req.write(post);
        req.end();
};

var client = new MtGoxClient('mykey', 'mysecret');
client.query('1/BTCUSD/public/ticker', {}, function(json) {
        // do something
        console.log(json);
});