聚币 现货 API [Python2版]

一、utils.py,基础类,包括HTTP 请求、签名等

# -*- coding: utf-8 -*-
import hashlib
import hmac
import time
import urllib
import urllib2
import json
from datetime import datetime
from uuid import UUID
from objutil import dict_obj
# import requests

def http_get(url, data_wrap, encode=False):
    if encode is True:
        data_wrap = urllib.urlencode(data_wrap)
    req = urllib2.Request(url, data=data_wrap)
    resp = urllib2.urlopen(req).read()
    dic = json.loads(resp)
    return dict_obj(dic)

def get_signature(private_key, data):
    data_en = urllib.urlencode(data)
    md5_hash = getHash(private_key)
    msg = bytes(data_en).encode('utf-8')
    key = bytes(md5_hash).encode('utf-8')
    signature = hmac.new(key, msg, digestmod=hashlib.sha256).digest()
    last_warp = "%s&signature=%s" % (data_en, toHex(signature))
    return last_warp

def get_nonce_time():
    curr_stamp = time.time() * 100
    return str(long(curr_stamp))

def getHash(s):
    m = hashlib.md5()
    m.update(s)
    return m.hexdigest()

def toHex(str):
    lst = []
    for ch in str:
        hv = hex(ord(ch)).replace('0x', '')
        if len(hv) == 1:
            hv = ' + hv
        lst.append(hv)
    return reduce(lambda x, y: x + y, lst)

def getUserData(cfg_file):
    f = open(cfg_file, 'r')
    account = {}
    for i in f.readlines():
        ctype, passwd = i.split('=')
        account[ctype.strip()] = passwd.strip()

    return account

class CJsonEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, datetime):
            return obj.strftime('%Y-%m-%d %H:%M:%S')
        elif isinstance(obj, UUID):
            return str(obj)
        else:
            return json.JSONEncoder.default(self, obj)

def json_dumps(result):
    return json.dumps(result, cls=CJsonEncoder)

二、jubi.py,聚币网API

# -*- coding: utf-8 -*-
# @Author: wujiyu
# @Date:   2017-07-09 10:44:41
# @Last Modified by:   far
# @Last Modified time: 2017-07-25 09:28:12

from utils import *

BASE_API = "https://www.jubi.com/api/v1"

TICKER_API = "%s/ticker" % BASE_API
DEPTH_API = "%s/depth" % BASE_API
ORDERS_API = "%s/orders" % BASE_API
BALANCE_API = "%s/balance" % BASE_API
TRADLIST_API = "%s/trade_list" % BASE_API
TRADEVIEW_API = "%s/trade_view" % BASE_API
TRADECANCEL_API = "%s/trade_cancel" % BASE_API
TRADEADD_API = "%s/trade_add" % BASE_API

class JuBi(object):
    """docstring for JuBi"""

    def __init__(self):
        super(JuBi, self).__init__()
        cfg = getUserData('data.cfg')
        self.public_key = cfg['public_key']
        self.private_key = cfg['private_key']

    def get_ticker(self, coin):
        data_wrap = {'coin': coin}
        return http_get(TICKER_API, data_wrap, True)

    def get_depth(self, coin):
        data_wrap = {'coin': coin}
        return http_get(DEPTH_API, data_wrap, True)

    def get_orders(self, coin):
        data_wrap = {'coin': coin}
        return http_get(ORDERS_API, data_wrap, True)

    def get_balance(self):
        nonce = get_nonce_time()
        data_wrap = {'nonce': nonce,
                     'key': self.public_key}
        all_data = get_signature(self.private_key, data_wrap)
        return http_get(BALANCE_API, all_data)

    def get_trade_list(self, coin):
        #  open:正在挂单, all:所有挂单
        trade_type = "open"
        since = "
        nonce = get_nonce_time()
        data_wrap = {'nonce': nonce, 'type': trade_type, 'coin': coin, 'since': since,
                     'key': self.public_key}
        all_data = get_signature(self.private_key, data_wrap)
        return http_get(TRADLIST_API, all_data)

    def get_trade_view_list(self, coin, id):
        nonce = get_nonce_time()
        data_wrap = {'nonce': nonce, 'coin': coin,
                     'key': self.public_key, 'id': id}
        all_data = get_signature(self.private_key, data_wrap)
        return http_get(TRADEVIEW_API, all_data)

    def cancel(self, coin, id):
        nonce = get_nonce_time()
        data_wrap = {'nonce': nonce, 'coin': coin,
                     'key': self.public_key, 'id': id}
        all_data = get_signature(self.private_key, data_wrap)
        return http_get(TRADECANCEL_API, all_data)

    def trade_add(self, coin, amount, price, sell_type):
        nonce = get_nonce_time()
        data_wrap = {'nonce': nonce, 'coin': coin,
                     'key': self.public_key, 'amount': amount, "price": price, "type": sell_type}
        all_data = get_signature(self.private_key, data_wrap)
        return http_get(TRADEADD_API, all_data)

    def sell(self, coin, amount, price):
        return self.trade_add(coin, amount, price, "sell")

    def buy(self, coin, amount, price):
        return self.trade_add(coin, amount, price, "buy")

    def cancel_all(self, coin, sell_type="all"):
        lst = self.get_trade_list(coin)
        print("当前挂单!!!!!!!!!!:%s" % (lst))
        for item in lst:
            if sell_type == "all" or sell_type == item["type"]:
                self.cancel(coin, item["id"])
        print("取消挂单成功!!!!!!!!!")
        print("当前挂单!!!!!!!!!!:%s" % (self.get_trade_list(coin)))
        return True

    def cancel_all_sell(self, coin):
        return self.cancel_all(coin, "sell")

    def cancel_all_buy(self, coin):
        return self.cancel_all(coin, "buy")

三、调用方法

coin = "btc"
jubi = JuBi()
print(jubi.get_ticker(coin))
# print(jubi.get_depth(coin))
# print(jubi.get_orders(coin))
# print(jubi.get_balance())
# print(jubi.get_trade_list(coin))
# print(jubi.get_trade_view_list(coin, "1"))
# print(jubi.get_trade_cancel_list(coin, "1"))
# print(jubi.sell(coin, 10000, 0.001))
# print(jubi.buy(coin, 100, 0.2))
# print(jubi.get_trade_cancel_list(coin, "1"))
# print(jubi.cancel(coin, 940591))

四、下载地址

http://www.cnblogs.com/fangbei/p/jubi-api-python.html

http://files.cnblogs.com/files/fangbei/jubi-api-python2.zip

聚币网API[Python2版]的更多相关文章

  1. 聚币网API[Python3版]

    代码 #!/usr/bin/env python # -*- coding:utf-8 -*- import hashlib import requests import time import ur ...

  2. 聚币网API使用教程 demo

    原文 http://30daydo.com/article/181 目前还在完善,等功能完善了,就更新到csdn. 更新 2017-05-27 官方有API的文档,可是这个文档就像一个草稿一样,两个基 ...

  3. 火币网现货API[Python3版]

    火币 期货 现货 API [Python3版] 一.Util.py,基础类,包括参数配置.签名,HTTP 请求方法,发送信息到API #coding=utf-8 import hashlib impo ...

  4. 淘宝网触屏版 - 学习笔记(1 - 关于meta)

    注:本文是学习笔记,并不是教程,所以会有很多我不理解或猜测的问题,也会有不尽详实之处,望见谅. <meta charset="utf-8"> <meta cont ...

  5. 淘宝网触屏版 - 学习笔记(0 - 关于dpr)

    注:本文是学习笔记,并不是教程,所以会有很多我不理解或猜测的问题,也会有不尽详实之处,望见谅. 对于pc端网页设计师来说,移动端的网页制作,我之前只是简单的加了一个 <meta name=&qu ...

  6. [转载]中国天气网API

    最近在做个网站要用到天气网的api,在网上找了些参考资料,这篇文章对天气网api的介绍比较详细,所以转载之,谢谢原作者的辛勤劳动和奉献精神. 原文地址:http://g.kehou.com/t1033 ...

  7. OKCoin期货现货API[Python3版]

    OKCoin 期货 现货 API [Python版] 一.HttpMD5Util.py,基础类,包括MD5签名,HTTP Post及HTTP Get方法 #!/usr/bin/python # -*- ...

  8. 火币Huobi API Websocket

    本文介绍火币Huobi API Websocket WebSocket API简介 WebSocket协议是基于TCP的一种新的网络协议.它实现了客户端与服务器之间在单个 tcp 连接上的全双工通信, ...

  9. 火币Huobi API

    本文介绍火币Huobi API REST API 简介 火币为用户提供了一套全新的API,可以帮用户快速接入火币PRO站及HADAX站的交易系统,实现程序化交易. 访问地址 适用站点 适用功能 适用交 ...

随机推荐

  1. 使用jersey 注解包扫描类PackageNamesScanner

    Jersey 中自带一个包扫描,可以是包,或者具体类名 ,扫描的类型是自己定注解类型,实现功能更加大,可以是jar 包 可以是虚拟地址下的 Jersey 主要用来扫描Path Provider 类中同 ...

  2. Linux工具之bc计算器进制的转换

    bc是Linux下的命令行式的计算器. 题目虽然叫任意进制,但是因为bc的限制,输入进制是2~16范围:输出进制是2~999范围.这与常见计算器的进制范围是一致的,比如windows计算器最高也只能处 ...

  3. redhat6.4配置yum

    redhat6.4配置本地yum 1. 挂载(我喜欢放在/mnt下面)     mount -t auto *** /mnt/redhat     或     cp *** /mnt/redhat   ...

  4. nyoj_120: 校园网络

    题目链接 要加边使一个图成为一个强连通分量,只需加max(出度为0的点数,入度为0的点数)条边(可以不使用tarjan算法).题目数据有点弱,网上一些人所谓 结果 = 出度为0的点的数量+入度为0的点 ...

  5. 文件的默认权限UMASK

    当进入Linux系统后新创建的文件或者文件夹总是会有一个默认的权限,那么这个权限是如何设置的呢? umask就是设置文件与目录的默认权限 1. 查看umask 直接查看, [root@centos6 ...

  6. (转)每天一个linux命令(27):linux chmod命令

    场景:在项目部署过程中经常需要给不同目录授权! 1 简介 chmod命令用于改变linux系统文件或目录的访问权限.用它控制文件或目录的访问权限.该命令有两种用法.一种是包含字母和操作符表达式的文字设 ...

  7. 【JAVASCRIPT】React学习- 与 flux 结合使用

    摘要 react 学习包括几个部分: 文本渲染 JSX 语法 组件化思想 数据流 与flux 结合使用

  8. CentOS5.5中卸载自带jdk 安装自己的jdk

    因为需要使用JDK1.6的版本,但是RedHat6.4自带的JDK是1.7版本,因此需要卸载JDK1.7,安装JDK1.6的版本,我使用的JDK1.6版本为:jdk-6u45-Linux-x64.bi ...

  9. Angular页面选项卡切换要注意的toggleClass

    在第一,第二篇随笔中写到的选项卡切换,我回头看了看发现缺少了一个很重要的部分,那就是toggleClass. //在js控制器中必须写明指令,要不然在页面写了toggle-class="ac ...

  10. mybatis 详解(一)------JDBC

    1.什么是MyBatis? MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且 ...