使用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之使用Python操作数据库(1)
Nov 25 Python
scrapy spider的几种爬取方式实例代码
Jan 25 Python
python3中的md5加密实例
May 29 Python
python 使用re.search()筛选后 选取部分结果的方法
Nov 28 Python
PyCharm 设置SciView工具窗口的方法
Jan 15 Python
python环境路径配置以及命令行运行脚本
Apr 02 Python
对Python中class和instance以及self的用法详解
Jun 26 Python
Python 调用 Outlook 发送邮件过程解析
Aug 08 Python
python飞机大战pygame游戏之敌机出场实现方法详解
Dec 17 Python
如何验证python安装成功
Jul 06 Python
python sleep和wait对比总结
Feb 03 Python
Python实战之大鱼吃小鱼游戏的实现
Apr 01 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
探讨如何把session存入数据库
2013/06/07 PHP
PHP文件上传判断file是否己选择上传文件的方法
2014/11/10 PHP
PHP中的常见魔术方法功能作用及用法实例
2015/07/01 PHP
浅谈PHP中foreach/in_array的使用
2015/11/02 PHP
制作个性化的WordPress登陆界面的实例教程
2016/05/21 PHP
PHP实现统计在线人数功能示例
2016/10/15 PHP
php排序算法实例分析
2016/10/17 PHP
phpcms中的评论样式修改方法
2016/10/21 PHP
Cookie 小记
2010/04/01 Javascript
javascript与webservice的通信实现代码
2010/12/25 Javascript
JavaScript全局函数使用简单说明
2011/03/11 Javascript
输入框过滤非数字的js代码
2014/09/18 Javascript
jQuery使用fadein方法实现渐出效果实例
2015/03/27 Javascript
微信小程序 animation API详解及实例代码
2016/10/08 Javascript
AngularJS自定义插件实现网站用户引导功能示例
2016/11/07 Javascript
基于BootStrap与jQuery.validate实现表单提交校验功能
2016/12/22 Javascript
livereload工具实现前端可视化开发【推荐】
2016/12/23 Javascript
打字效果动画的4种实现方法(超简单)
2017/10/18 Javascript
详解React中setState回调函数
2018/06/14 Javascript
详解关于表格合并span-method方法的补充(表格数据由后台动态返回)
2019/05/21 Javascript
在微信小程序中渲染HTML内容3种解决方案及分析与问题解决
2020/01/12 Javascript
jQuery实现移动端下拉展现新的内容回弹动画
2020/06/24 jQuery
跟老齐学Python之眼花缭乱的运算符
2014/09/14 Python
用Python进行TCP网络编程的教程
2015/04/29 Python
Django 404、500页面全局配置知识点详解
2020/03/10 Python
Python经典五人分鱼实例讲解
2021/01/04 Python
python 第三方库paramiko的常用方式
2021/02/20 Python
中层干部竞争上岗演讲稿
2014/01/13 职场文书
2014全年工作总结
2014/11/27 职场文书
工作经验交流材料
2014/12/30 职场文书
元旦晚会主持词开场白
2015/05/28 职场文书
2016年学校党支部公开承诺书
2016/03/25 职场文书
Django展示可视化图表的多种方式
2021/04/08 Python
python 自动化偷懒的四个实用操作
2021/04/11 Python
MySQL into_Mysql中replace与replace into用法案例详解
2021/09/14 MySQL
搭建Yolov5服务器
2022/04/30 Servers