Title: Trying to access mtgox API through with python-code
Post by: trasp on September 27, 2011, 03:19:41 AM
Well, I've been fooling around some with the mtgix APi but can't get it to work, looked through goxsh, the wiki and some thread here with some C#-code and as far as I can tell this code really should work, but obviously it doesn't :(... some help would be very much appriciated... Edit: I managed to fix it and replaced the code, this should work for anyone else struggling with mtgox API: # API import urllib, urllib2, json # API-Auth import base64 import hmac import hashlib import time
## [...]
self.counter = 0 self.apikey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" self.secret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" self.useragent = "TraspAPInfo"
## [...]
def _url_mtgox(self, url, postdict=None, timeout=8): if postdict: postdata = urllib.urlencode(postdict) # nonce=########## sign = base64.b64encode(str(hmac.new(base64.b64decode(self.secret), postdata, hashlib.sha512).digest())) # Decode the secret from mtgox -> Use that as key to hash the postdata -> Encode that string headers = { "User-Agent":self.useragent, "Rest-Key":self.apikey, "Rest-Sign":sign } request = urllib2.Request(url, postdata, headers) else: request = urllib2.Request(url) response = urllib2.urlopen(request, postdata, timeout=timeout) return json.loads(response.read())
## [...]
@pyqtSlot() def info(self,cry="USD"): api = "https://mtgox.com/api/0/info.php" postdict = { "nonce":int(time.time())*1000+self.counter } self.counter += 1 jsondata = self._url_mtgox(api,postdict=postdict) self.ui.statusEdit.append(jsondata["Wallets"][cry]["Balance"]["display"]) # Print Balance
Title: Re: Trying to access mtgox API through with python-code
Post by: Chris Acheson on September 27, 2011, 10:33:57 AM
Try this: https://github.com/ezl/mtgox
Title: Re: Trying to access mtgox API through with python-code
Post by: kokjo on September 27, 2011, 10:43:08 AM
https://github.com/kokjo/MtGoxAPI
Title: Re: Trying to access mtgox API through with python-code
Post by: trasp on September 27, 2011, 04:14:47 PM
Both these examples is using the old mtgox API =(
Title: Re: Trying to access mtgox API through with python-code
Post by: semyazza on September 28, 2011, 02:00:50 AM
Both these examples is using the old mtgox API =(
Here's another one using the old API. Should be easy to change/get ideas from. #!/usr/bin/env python
import simplejson import urllib import urllib2 import urlparse
market_depth_url = "http://mtgox.com/code/data/getDepth.php" ticker_data_url = "http://mtgox.com/code/data/ticker.php" recent_trades_url = "http://mtgox.com/code/data/getTrades.php" current_balance_url = "https://mtgox.com/code/getFunds.php?name=blah&pass=blah" buy_order_url = "https://mtgox.com/code/buyBTC.php?name=blah&pass=blah&amount=number&price=number" sell_order_url = "https://mtgox.com/code/sellBTC.php?name=blah&pass=blah&amount=number&price=number" open_order_url = "https://mtgox.com/code/getOrders.php?name=blah&pass=blah" cancel_order_url = "https://mtgox.com/code/cancelOrder.php?name=blah&pass=blah&oid=number&type=number" send_btc_url = "https://mtgox.com/code/withdraw.php?name=blah&pass=blah&group1=BTC&btca=bitcoin_address_to_send_to&amount=number" checkout_url = "https://mtgox.com/merch/checkout" verify_transaction_url = "https://mtgox.com/code/gateway/checkTxn.php"
def getBitcoinSellValue(quantity): data = simplejson.load(urllib2.urlopen(market_depth_url)) data['bids'].sort(reverse=True) market_USD_value = 0 total_bitcoins = 0 for i in data['bids']: market_USD_value = market_USD_value + ((i[0]) * (i[1])) total_bitcoins = total_bitcoins + (i[1]) if total_bitcoins >= quantity: bitcoin_value = market_USD_value / total_bitcoins return bitcoin_value
def getBitcoinBuyValue(quantity): data = simplejson.load(urllib2.urlopen(market_depth_url)) data['asks'].sort() market_USD_value = 0 total_bitcoins = 0 for i in data['asks']: market_USD_value = market_USD_value + ((i[0]) * (i[1])) total_bitcoins = total_bitcoins + (i[1]) if total_bitcoins >= quantity: bitcoin_value = market_USD_value / total_bitcoins return bitcoin_value
def createSellOrder(username, password, amount, price): format_url = urlparse.urlparse(sell_order_url) new_url = format_url.scheme + ":" + "//" + format_url.netloc + format_url.path query = urlparse.parse_qs(format_url.query) query['price'] = price query['amount'] = amount query['name'] = username query['pass'] = password f = urllib.urlopen(new_url, urllib.urlencode(query)) return f.read() def createBuyOrder(username, password, amount, price): format_url = urlparse.urlparse(buy_order_url) new_url = format_url.scheme + ":" + "//" + format_url.netloc + format_url.path query = urlparse.parse_qs(format_url.query) query['price'] = price query['amount'] = amount query['name'] = username query['pass'] = password f = urllib.urlopen(new_url, urllib.urlencode(query)) return f.read() def getBalance(username, password): format_url = urlparse.urlparse(current_balance_url) new_url = format_url.scheme + ":" + "//" + format_url.netloc + format_url.path query = urlparse.parse_qs(format_url.query) query['name'] = username query['pass'] = password f = urllib.urlopen(new_url, urllib.urlencode(query)) return f.read() def getOpenOrders(username, password): format_url = urlparse.urlparse(open_order_url) new_url = format_url.scheme + ":" + "//" + format_url.netloc + format_url.path query = urlparse.parse_qs(format_url.query) query['name'] = username query['pass'] = password f = urllib.urlopen(new_url, urllib.urlencode(query)) return f.read() def cancelOrder(username, password, orderid, type): format_url = urlparse.urlparse(cancel_order_url) new_url = format_url.scheme + ":" + "//" + format_url.netloc + format_url.path query = urlparse.parse_qs(format_url.query) query['oid'] = orderid query['type'] = type query['name'] = username query['pass'] = password f = urllib.urlopen(new_url, urllib.urlencode(query)) return f.read() def sendBTC(username, password, destination, amount): format_url = urlparse.urlparse(send_btc_url) new_url = format_url.scheme + ":" + "//" + format_url.netloc + format_url.path query = urlparse.parse_qs(format_url.query) query['btca'] = destination query['amount'] = amount query['name'] = username query['pass'] = password query['group1'] = 'BTC' f = urllib.urlopen(new_url, urllib.urlencode(query)) return f.read() def verifyTransaction(txn_id, merchID, amount): format_url = urlparse.urlparse(verify_transaction_url) new_url = format_url.scheme + ":" + "//" + format_url.netloc + format_url.path query = urlparse.parse_qs(format_url.query) query['txn_id'] = txn_id query['amount'] = amount query['merchID'] = merchID f = urllib.urlopen(new_url, urllib.urlencode(query)) return f.read()
Title: Re: Trying to access mtgox API through with python-code
Post by: trasp on September 28, 2011, 04:22:38 AM
Actually, I had it mostly right, I had managed to get the URL wrong and missed one parameter for urllib, which I'm now unsure if I really need or not. Big up to ahihi/Optonic (goxsh), your code helped me understanding this authentication-thing! (didn't fully understand that code currently on the wiki)
And thanks for the links and code :)
|