Tag Archives: Mount Gox

Source Code: MountGoxCommandLineInterface.scala

Standard

Source code of MountGoxCommandLineInterface.scala. Not necessariely the actual version.

/******************************************************************   
  mgcli: main class
 ******************************************************************/

object mgcli {
    val version = "V0.8.2"
    val header1: String = "  Mount Gox Command Line Interface " + version
    val header2: String = " ---------------------------------------"

    def opHelp = {
        println("  syntax: mgcli <command> [options]")
        println("  available commands:")
        println("    help")
        println("    ticker")
        println("    info")
        println("    orders")
        println("    cancelorder <oid>")
        println("    buybtc <amount> [price]   (amount in BTC, price (optional) in USD)")
        println("    sellbtc <amount> [price]   (amount in BTC, price (optional) in USD)")
        println("    history <currency=BTC|USD>")
        println("    depth (only USD)")
        println("    trades (only USD)")
        println
        println("  ")
        println("  LIABILITY: The author of this program does not assume any liability for any")
        println("  effects caused by this program. Use it on your own responsibility. ")
        println("  ")
        println("  Get updates and more information at: mgcli.wordpress.com")
        println("  Submit bug reports and feedback at: https://mgcli.wordpress.com/feedback")
        println("  ")
        println("  If this program is useful to you, consider a Bitcoin donation to:")
        println("  1EZ3gMP2VM3iEak7foSLmyeJJVj47NUWbe")
        println
        println
    }

    def opCancel (oid: String) = {
        val gox: MountGox = new MountGox()
        var res: Tuple2[Boolean, String] = gox.existOrder(oid)
        if (res._1) {
            println(res._2)
            println("  Type 'yes' + <ENTER> to cancel this order ...")

            if (readLine == "yes") {
                println("  Canceling order " + oid + " ...")
                res = gox.cancelOrder(oid)
            }
                else println ("  Cancel order " + oid + " aborted ...")
        }
            else println(res._2)
    }

    def opSellBTC(args: Array[String]) = opTradeBTC(args, GTConsts.SELL)
    def opBuyBTC(args: Array[String]) = opTradeBTC(args, GTConsts.BUY)

    def opTradeBTC(args: Array[String], typ: Int) = {

      def tradeFunc(strAmount: String, strPrice: String): Tuple3[Boolean, String, String] = {
            typ match {
              case GTConsts.SELL => return new MountGox() sellBTC(strAmount, strPrice)
              case GTConsts.BUY =>  return new MountGox() buyBTC(strAmount, strPrice)
          }
      }

      var tradeType = ""
        typ match {
          case GTConsts.SELL => {
              tradeType = "sell"
          }

          case GTConsts.BUY => {
               tradeType = "buy"
          }
        }

        //check if price was given
        val priced: Boolean = (args.length > 3)

        var execute: Boolean = true
        var amount: Float = -1
        var price: Float = -1

        //check if arguments are valid numbers
        try { amount = args(2).toFloat } catch {
            case e => {
                println ("  Amount '" + args(2) + "' is not a valid number string. Aborting ...")
                execute = false
            }
        }        

        if (priced && execute) {
            try { price = args(3).toFloat    } catch {
                case e => {
                    println ("  Price '" + args(3) + "' is not a valid number string. Aborting ...")
                    execute = false
                }
            }        
        }

        // no price given, executing with empty price argument for market price order        
        if (execute && !priced) {
            println("  Do you want to " + tradeType + " " + amount +
                " BTC for the actual market price?")
            println("  Type 'yes' + <ENTER> to continue ...")
            if (readLine == "yes") {
                println("  Executing " +
                    tradeType + "ing " + amount + " BTC for the actual market price ...")
              var res = tradeFunc(amount.toString, "")
                println("  " + res._2 + ": " + res._3)
            }
                else println("  The " + tradeType + "ing of " +
                    amount + " BTC for the actual market price was aborted ...")
        }

        // price given, putting in order
        if (execute && priced) {
            println("  Do you want to " + tradeType + " " + amount + " BTC for " +
                price + " USD per BTC?")
            println("  Type 'yes' + <ENTER> to continue ...")
            if (readLine == "yes") {
                println("  Executing the " + tradeType +
                    "ing of " + amount + " BTC for " + price + " USD per BTC...")
                var res = tradeFunc(amount.toString, price.toString)
                println("  " + res._2 + ": " + res._3)
            }
                else println ("  The " + tradeType + "ing of " + amount +
                    " BTC for " + price + "USD per BTC aborted ...")
        }
    }

  def main(args: Array[String]) {
        goxCfg.envValue = "mgcliconfig"
        goxCfg.read

        println
        println(header1)
        println(header2)
        println
        //println("debug. a0: " + args(0) + "  a1: " +
            //args(1) + "  a2: " + args(2) + "  a3: " + args(3))

        if (args.length > 1) {
            args(1) match {
                case "help" => opHelp
                case "ticker" => new MountGox() printTickerData
                case "info" => new MountGox() printInfoData
                case "orders" => new MountGox() printOrders
                case "depth" => new MountGox() printDepth
                case "trades" => new MountGox() printAllTrades

                case "cancelorder" =>
                    if (args.length > 2) opCancel(args(2))
                        else println("  mgcli cancelorder: missing oid argument")

                case "buybtc" =>
                    if (args.length > 2) opBuyBTC(args)
                        else println("  mgcli buybtc: missing amount and/or price argument")

                case "sellbtc" =>
                    if (args.length > 2) opSellBTC(args)
                        else println(  "mgcli sellbtc: missing amount and/or price argument")

                case "history" =>
                    if ((args.length > 2) && ((args(2) == "BTC") || (args(2) == "USD"))) {
                        new MountGox() printHistory(args(2))
                    }
                        else println("  mgcli history: missing or misspelled currency. use 'USD' or 'BTC'")

                case _ => println("  get help with 'mgcli help'")                
            }
        }
            else println("  get help with 'mgcli help'")

        println
    }
}
Advertisements