侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

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

Python  /  管理员 发布于 7年前   258

当我们的资产放在交易所的时候,可以通过链接交易所的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


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

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

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

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

完整代码如下:

import pandas as pdimport randomimport ccxtimport threading, time, datetimeimport jsonimport urllibimport datetimeimport 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,就会出现合约地址。


这样把三个输入组成新的获取地址,就能获得代币的余额。你要查询的以太坊地址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一样展开有余额信息,那我们只要找到请求头部信息就能获得了


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


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

我当时设定的是购买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 多进程共享全局变量之Manager()详解
    下一条:
    centos7之Python3.74安装教程
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客