使用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函数帮助查询小工具
Mar 13 Python
python获取本地计算机名字的方法
Apr 29 Python
python通过openpyxl生成Excel文件的方法
May 12 Python
利用Python为iOS10生成图标和截屏
Sep 24 Python
python控制windows剪贴板,向剪贴板中写入图片的实例
May 31 Python
PyQt5 QTableView设置某一列不可编辑的方法
Jun 25 Python
pandas 使用均值填充缺失值列的小技巧分享
Jul 04 Python
Python依赖包整体迁移方法详解
Aug 15 Python
使用opencv将视频帧转成图片输出
Dec 10 Python
安装完Python包然后找不到模块的解决步骤
Feb 13 Python
Python3如何判断三角形的类型
Apr 12 Python
python实现程序重启和系统重启方式
Apr 16 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
第一节--面向对象编程
2006/11/16 PHP
php报表之jpgraph柱状图实例代码
2011/08/22 PHP
微信公众平台开发关注及取消关注事件的方法
2014/12/23 PHP
Laravel框架中自定义模板指令总结
2017/12/17 PHP
js里取容器大小、定位、距离等属性搜集整理
2013/08/19 Javascript
javascript使用正则控制input输入框允许输入的值方法大全
2014/06/19 Javascript
JavaScript日期时间与时间戳的转换函数分享
2015/01/31 Javascript
jquery实现两个图片渐变切换效果的方法
2015/06/25 Javascript
jQuery中hover与mouseover和mouseout的区别分析
2015/12/24 Javascript
利用JS生成博文目录及CSS定制博客
2016/02/10 Javascript
JS简单实现点击复制链接的方法
2016/08/03 Javascript
Angular.js指令学习中一些重要属性的用法教程
2017/05/24 Javascript
结合Vue控制字符和字节的显示个数的示例
2018/05/17 Javascript
ES6 Set结构的应用实例分析
2019/06/26 Javascript
Webpack5正式发布,有哪些新特性
2020/10/12 Javascript
使用cx_freeze把python打包exe示例
2014/01/24 Python
Python中asyncore的用法实例
2014/09/29 Python
基于python的Tkinter实现一个简易计算器
2015/12/31 Python
python实现感知器
2017/12/19 Python
Python操作MySQL模拟银行转账
2018/03/12 Python
Python查找两个有序列表中位数的方法【基于归并算法】
2018/04/20 Python
python 实现在txt指定行追加文本的方法
2018/04/29 Python
对python3新增的byte类型详解
2018/12/04 Python
python3 json数据格式的转换(dumps/loads的使用、dict to str/str to dict、json字符串/字典的相互转换)
2019/04/01 Python
python支付宝支付示例详解
2019/08/22 Python
python实现树的深度优先遍历与广度优先遍历详解
2019/10/26 Python
Django跨域资源共享问题(推荐)
2020/03/09 Python
欧洲当代手工玻璃和瓷器的领先品牌:LSA International
2018/06/03 全球购物
澳大利亚儿童精品仓库:Goo & Co.
2019/06/20 全球购物
高中自我评价范文
2014/01/27 职场文书
旷课检讨书1000字
2014/02/14 职场文书
联谊会主持词
2014/03/26 职场文书
社团活动总结范文
2014/04/26 职场文书
孝敬父母的活动方案
2014/08/28 职场文书
三好学生主要事迹怎么写
2015/11/03 职场文书
2019最新企业员工考勤管理制度(通用版)!
2019/07/02 职场文书