使用Python调取任意数字资产钱包余额功能


Posted in Python onAugust 15, 2019

当我们的资产放在交易所的时候,可以通过链接交易所的API使用Python来监控余额。

那资产放在钱包的时候,如何来监控余额呢?

任何数字资产都可以使用区块浏览器来查询余额,那我们只要从此着手,用Python调取区块浏览器,来查询余额就能实现所有资产的余额监控。

数字资产区块链浏览器有很多,比如比特币区块浏览器btc.com,以太坊区块浏览器etherscan.io,ATOM区块浏览器mintscan.io,PCX区块浏览器scan.chainx.org等等。

区块浏览器可以根据是否提供API分为两大类,做的好的会把API标示出来,供大家查询。做的粗糙的就不明确告诉你API,但通过爬虫的方式是可以找出来的。

下面我们逐一分析:

一、提供API查询的区块浏览器

1.比特币 区块浏览器 btc.com

在首页下面有提供API,并配有说明文档https://btc.com/api-do

使用Python调取任意数字资产钱包余额功能

这种获取比较简单,根据文档中查找可以查询余额的地址获取即可。

比如btc.com中找到获取网址为https://chain.api.btc.com/v3/address/3JvpMTpy6DDp1Um3iEGYpkBaUmJp7ReMR2,最后一串为比特币地址,通过Python中requests.get( )即可返回相关数据如下:

使用Python调取任意数字资产钱包余额功能

注意余额的单位每个币种都不一样,根据自己钱包余额调整即可,比如上述余额实际需要除以10e7(10的7次方)就可得到余额为0.14141195个BTC。

接下来我们就可以监控我们的钱包余额,假设你从别处提到你钱包1个比特币,那监控什么时候余额大于1个比特币了,让程序实现钉钉发消息提醒即可。

完整代码如下:

import pandas as pd
import random
import ccxt
import threading, time, datetime
import json
import urllib
import datetime
import requests

# 异常监控用
def send_dingding_msg1(content, robot_id='你的钉钉机器人ID'):
  try:
    msg = {
      "msgtype": "text",
      "text": {"content": content + '\n' + datetime.datetime.now().strftime("%m-%d %H:%M:%S")}
    }
    headers = {"Content-Type": "application/json ;charset=utf-8 "}
    url = 'https://oapi.dingtalk.com/robot/send?access_token=' + robot_id
    body = json.dumps(msg)
    status = requests.post(url, data=body, headers=headers)
    if status.status_code == 200:
      return status.json()
    return status
  except Exception as err:
print ( '钉钉发送失败' , err)

while True:
  try:
    address = '你的比特币钱包地址' # 比特币钱包地址
    url = 'https://chain.api.btc.com/v3/address/' + address # 获取余额地址
    # 可以用f'https://chain.api.btc.com/v3/address/{address}'替代
    response = requests.get(url)
    if response.text: # 发现有时候会出现错误导致返回数据为空,加此目的当数据为空时继续获取余额
      # print(response.json())
      BTC = float(response.json()['data']['balance']) / 10e7 # 科学计数法,处理返回数据
      print('BTC', BTC)
    else:
      continue
    if BTC > 1: # 当余额大于1时实现钉钉提醒
      print('BTC', BTC)
      content = 'BTC钱包充值到账' #
      send_msg1 = send_dingding_msg1(content)
      print(send_msg1)
      break
    time.sleep(5)
  except Exception as order_err:
    print("查询出错,继续尝试", order_err)
    time.sleep(3)

2.以太坊区块浏览器etherscan.io余额查询

同样https://etherscan.io/apis此处也配有说明文档,与上述稍微不同的是它需要获取APIKEY,类似交易所申请API一样,需要注册下。

我们在说明文档可以看到获取以太坊余额的地址为:https://api.etherscan.io/api?module=account&action=balance&address=0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a&tag=latest&apikey=YourApiKeyToken,这里面需要用到你要查询的以太坊地址address和你申请的apikey, 我们可以把这两个设成变量,方便更改。

接下来就是处理数据了,同样要注意单位的不同,余额需要除以10e17才能转换成正常的。

我们也可以监控余额,比如当充值到这个钱包,ETH余额大于10时实现提醒。

还有一大批数字货币是ETH上的ERC20代币,如何获得他们的余额呢?

在说明文档中我们可以找到token一栏,有说明获取地址为https://api.etherscan.io/api?module=account&action=tokenbalance&contractaddress=0x57d90b64a1a57749b0f932f1a3395792e12e7055&address=0xe04f27eb70e025b78871a2ad7eabe85e61212761&tag=latest&apikey=YourApiKeyToken。仔细对比你会发现比ETH余额多了个智能合约contractaddress地址,这个查询方法也非常简单,在https://etherscan.io搜索代币,比如搜索OMG,就会出现合约地址。

使用Python调取任意数字资产钱包余额功能

这样把三个输入组成新的获取地址,就能获得代币的余额。你要查询的以太坊地址address、你申请的apikey、代币的合约地址contractaddress。我们可以把这三个设成变量,方便更改。

完整代码如下:

while True:
  try:
    apikey = '你在https://etherscan.io申请的apikey'
    address = '你的以太坊地址'
    # 查询以太坊地址
    url1 = 'https://api.etherscan.io/api?module=account&action=balance&address='+address+'&tag=latest&apikey='+apikey

    # 查询ERC20地址
    contractaddress = '0xd26114cd6EE289AccF82350c8d8487fedB8A0C07' ##OMG合约地址
    url2 = 'https://api.etherscan.io/api?module=account&action=tokenbalance&contractaddress='+ contractaddress+ '&address='+ address+'&tag=latest&apikey='+ apikey
    response1 = requests.get(url1)
    response2 = requests.get(url2)
    # print(response.json())
    asset1 = 'ETH'
    asset2 = 'OMG'
    ban1 = float(response1.json()['result']) / 10e17 # 科学计数法,处理返回数据
    ban2 = float(response2.json()['result']) / 10e17 # 科学计数法,处理返回数据
    print(asset1, ban1)
    print(asset2, ban2)
    if ban1 > 10:
      print(asset1, ban1)
      content = 'ETH钱包充值到账'
      send_msg1 = send_dingding_msg1(content)
      print(send_msg1)
      break
    time.sleep(5)
  except Exception as order_err:
    print("查询出错,继续尝试", order_err)
    time.sleep(3)

二,不提供API的区块浏览器

这种方法稍微复杂,需要爬虫来获取地址。

我们以最近有点火的chainx代币PCX为例来说明,因为这个币种采取了锁仓BTC挖矿来获得其代币PCX,而要想提取利息需要拿利息约11倍的PCX去投票,简单说就是让你去买PCX,我在其内网(链上交易)挂低价单来买,什么时候成交希望有个提醒,那就用程序监控区块浏览器我地址的余额,一旦成交立马投票去拿利息。

没经历过上面的朋友可能觉得很复杂,没关系,我们的目的就是用程序获取其钱包余额。

PCX区块浏览器地址为https://scan.chainx.org/,输入钱包地址之后就可以获得账户详情,怎么用程序获得余额呢?

在谷歌浏览器下按F12,进入开发者模式,点击Network、XHR,然后刷新。

我们发现在balance一样展开有余额信息,那我们只要找到请求头部信息就能获得了

使用Python调取任意数字资产钱包余额功能

点击Headers找到需要的信息,如下

使用Python调取任意数字资产钱包余额功能

这样我们就可以获得相关信息,然后对数据进行处理即可。

我当时设定的是购买35个,所以当数量大于30时用钉钉通知我。

完整代码如下

while True:
  try:
    url = "https://api.chainx.org.cn/account/你的PCX钱包地址/balance"
    headers = {
      "Content-type": "application/json; charset=utf-8",
      'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'
    }
    response = requests.get(url, headers=headers)
    balance = response.json()
    # print(balance)
    asset = 'PCX'
    PCX = balance[1]['Free']/100000000 # 此处注意PCX代币的位置,如果在第0个就改成[0]
    print('PCX', PCX)

    if PCX > 30:
      print('PCX', PCX)
      content = 'PCX购买已到账,余额为' + str(PCX) # 发一个变量,用str转换下
      send_msg1 = send_dingding_msg1(content)
      print(send_msg1)
      break
    time.sleep(3)
  except Exception as order_err:
    print("查询出错,继续尝试", order_err)
    time.sleep(3)

其它不提供API的区块浏览器获取方式是一样的。

有了以上的方法,我们就可以用程序获得任 意区块浏览器地址的余额,并进行监控了。

使用Python调取任意数字资产钱包余额功能

总结

以上所述是小编给大家介绍的使用Python调取任意数字资产钱包余额功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python 查找文件夹下所有文件 实现代码
Jul 01 Python
python实现在pickling的时候压缩的方法
Sep 25 Python
pygame学习笔记(2):画点的三种方法和动画实例
Apr 15 Python
详解Python3.6的py文件打包生成exe
Jul 13 Python
python使用Matplotlib绘制分段函数
Sep 25 Python
Python中一些深不见底的“坑”
Jun 12 Python
Django 全局的static和templates的使用详解
Jul 19 Python
Python实现打印实心和空心菱形
Nov 23 Python
Python绘制三角函数图(sin\cos\tan)并标注特定范围的例子
Dec 04 Python
flask框架渲染Jinja模板与传入模板变量操作详解
Jan 25 Python
python opencv 检测移动物体并截图保存实例
Mar 10 Python
Python实现简单得递归下降Parser
May 02 Python
centos7之Python3.74安装教程
Aug 15 #Python
详解python列表(list)的使用技巧及高级操作
Aug 15 #Python
django项目中使用手机号登录的实例代码
Aug 15 #Python
python基于pdfminer库提取pdf文字代码实例
Aug 15 #Python
python模拟键盘输入 切换键盘布局过程解析
Aug 15 #Python
django项目登录中使用图片验证码的实现方法
Aug 15 #Python
Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析
Aug 15 #Python
You might like
php输出表格的实现代码(修正版)
2010/12/29 PHP
php查看请求头信息获取远程图片大小的方法分享
2013/12/25 PHP
[原创]PHPCMS遭遇会员投稿审核无效的解决方法
2017/01/11 PHP
laravel中的一些简单实用功能
2018/11/03 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
2020/04/23 PHP
静态的动态续篇之来点XML
2006/08/15 Javascript
关于跨站脚本攻击问题
2011/12/22 Javascript
Jsonp post 跨域方案
2015/07/06 Javascript
你不知道的高性能JAVASCRIPT
2016/01/18 Javascript
解决node.js安装包失败的几种方法
2016/09/02 Javascript
JS实现简单抖动效果
2017/06/01 Javascript
bootstrap+jQuery 实现下拉菜单中复选框全选和全不选效果
2017/06/12 jQuery
vue2.0中vue-cli实现全选、单选计算总价格的实例代码
2017/07/18 Javascript
node.js实现微信JS-API封装接口的示例代码
2017/09/06 Javascript
vue2.0 element-ui中el-select选择器无法显示选中的内容(解决方法)
2018/08/24 Javascript
基于js实现复制内容到操作系统粘贴板过程解析
2019/10/11 Javascript
原生js实现日期选择插件
2020/05/21 Javascript
微信小程序实现底部弹出模态框
2020/11/18 Javascript
JavaScript实现鼠标移入随机变换颜色
2020/11/24 Javascript
windows下安装python paramiko模块的代码
2013/02/10 Python
Python基础教程之tcp socket编程详解及简单实例
2017/02/23 Python
django静态文件加载的方法
2018/05/20 Python
Python批处理删除和重命名文件夹的实例
2018/07/11 Python
Python 利用scrapy爬虫通过短短50行代码下载整站短视频
2018/10/29 Python
python opencv 简单阈值算法的实现
2019/08/04 Python
Python docutils文档编译过程方法解析
2020/06/23 Python
Keras: model实现固定部分layer,训练部分layer操作
2020/06/28 Python
瑞贝卡·泰勒官方网站:Rebecca Taylor
2016/09/24 全球购物
购买瑞典当代设计的腕表和太阳眼镜:TRIWA
2016/10/30 全球购物
Currentbody西班牙:美容仪专家
2019/09/28 全球购物
总经理文秘岗位职责
2014/02/03 职场文书
销售人员获奖感言
2014/02/05 职场文书
2014年迎新年活动方案
2014/02/19 职场文书
考察现实表现材料
2014/05/19 职场文书
《清澈的湖水》教学反思
2016/02/17 职场文书
Nginx缓存设置案例详解
2021/09/15 Servers