Bitcoin Forum
May 25, 2017, 01:01:06 PM *
News: Latest stable version of Bitcoin Core: 0.14.1  [Torrent]. (New!)
 
   Home   Help Search Donate Login Register  
Pages: [1]
  Print  
Author Topic: Trying to access mtgox API through with python-code  (Read 1985 times)
trasp
Newbie
*
Offline Offline

Activity: 23


View Profile
September 27, 2011, 03:19:41 AM
 #1

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 Sad... 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:

Code:
# 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
1495717266
Hero Member
*
Offline Offline

Posts: 1495717266

View Profile Personal Message (Offline)

Ignore
1495717266
Reply with quote  #2

1495717266
Report to moderator
1495717266
Hero Member
*
Offline Offline

Posts: 1495717266

View Profile Personal Message (Offline)

Ignore
1495717266
Reply with quote  #2

1495717266
Report to moderator
1495717266
Hero Member
*
Offline Offline

Posts: 1495717266

View Profile Personal Message (Offline)

Ignore
1495717266
Reply with quote  #2

1495717266
Report to moderator
POLONIEX TRADING SIGNALS
+50% Profit and more via TELEGRAM
ALTCOINTRADER.CO
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction. Advertise here.
Chris Acheson
Sr. Member
****
Offline Offline

Activity: 266


View Profile
September 27, 2011, 10:33:57 AM
 #2

Try this: https://github.com/ezl/mtgox
kokjo
Legendary
*
Offline Offline

Activity: 1050

You are WRONG!


View Profile
September 27, 2011, 10:43:08 AM
 #3

https://github.com/kokjo/MtGoxAPI

"The whole problem with the world is that fools and fanatics are always so certain of themselves and wiser people so full of doubts." -Bertrand Russell
trasp
Newbie
*
Offline Offline

Activity: 23


View Profile
September 27, 2011, 04:14:47 PM
 #4

Both these examples is using the old mtgox API =(
semyazza
Sr. Member
****
Offline Offline

Activity: 339


View Profile
September 28, 2011, 02:00:50 AM
 #5

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.

Code:
#!/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()

trasp
Newbie
*
Offline Offline

Activity: 23


View Profile
September 28, 2011, 04:22:38 AM
 #6

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 Smiley
Pages: [1]
  Print  
 
Jump to:  

Sponsored by , a Bitcoin-accepting VPN.
Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!