使用Python調(diào)取任意數(shù)字資產(chǎn)錢包余額功能
當(dāng)我們的資產(chǎn)放在交易所的時(shí)候,可以通過鏈接交易所的API使用Python來監(jiān)控余額。
那資產(chǎn)放在錢包的時(shí)候,如何來監(jiān)控余額呢?
任何數(shù)字資產(chǎn)都可以使用區(qū)塊瀏覽器來查詢余額,那我們只要從此著手,用Python調(diào)取區(qū)塊瀏覽器,來查詢余額就能實(shí)現(xiàn)所有資產(chǎn)的余額監(jiān)控。
數(shù)字資產(chǎn)區(qū)塊鏈瀏覽器有很多,比如比特幣區(qū)塊瀏覽器btc.com,以太坊區(qū)塊瀏覽器etherscan.io,ATOM區(qū)塊瀏覽器mintscan.io,PCX區(qū)塊瀏覽器scan.chainx.org等等。
區(qū)塊瀏覽器可以根據(jù)是否提供API分為兩大類,做的好的會(huì)把API標(biāo)示出來,供大家查詢。做的粗糙的就不明確告訴你API,但通過爬蟲的方式是可以找出來的。
下面我們逐一分析:
一、提供API查詢的區(qū)塊瀏覽器
1.比特幣 區(qū)塊瀏覽器 btc.com
在首頁下面有提供API,并配有說明文檔https://btc.com/api-do
這種獲取比較簡單,根據(jù)文檔中查找可以查詢余額的地址獲取即可。
比如btc.com中找到獲取網(wǎng)址為https://chain.api.btc.com/v3/address/3JvpMTpy6DDp1Um3iEGYpkBaUmJp7ReMR2,最后一串為比特幣地址,通過Python中requests.get( )即可返回相關(guān)數(shù)據(jù)如下:
注意余額的單位每個(gè)幣種都不一樣,根據(jù)自己錢包余額調(diào)整即可,比如上述余額實(shí)際需要除以10e7(10的7次方)就可得到余額為0.14141195個(gè)BTC。
接下來我們就可以監(jiān)控我們的錢包余額,假設(shè)你從別處提到你錢包1個(gè)比特幣,那監(jiān)控什么時(shí)候余額大于1個(gè)比特幣了,讓程序?qū)崿F(xiàn)釘釘發(fā)消息提醒即可。
完整代碼如下:
import pandas as pd import random import ccxt import threading, time, datetime import json import urllib import datetime import requests # 異常監(jiān)控用 def send_dingding_msg1(content, robot_id='你的釘釘機(jī)器人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 ( '釘釘發(fā)送失敗' , 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: # 發(fā)現(xiàn)有時(shí)候會(huì)出現(xiàn)錯(cuò)誤導(dǎo)致返回?cái)?shù)據(jù)為空,加此目的當(dāng)數(shù)據(jù)為空時(shí)繼續(xù)獲取余額 # print(response.json()) BTC = float(response.json()['data']['balance']) / 10e7 # 科學(xué)計(jì)數(shù)法,處理返回?cái)?shù)據(jù) print('BTC', BTC) else: continue if BTC > 1: # 當(dāng)余額大于1時(shí)實(shí)現(xiàn)釘釘提醒 print('BTC', BTC) content = 'BTC錢包充值到賬' # send_msg1 = send_dingding_msg1(content) print(send_msg1) break time.sleep(5) except Exception as order_err: print("查詢出錯(cuò),繼續(xù)嘗試", order_err) time.sleep(3)
2.以太坊區(qū)塊瀏覽器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, 我們可以把這兩個(gè)設(shè)成變量,方便更改。
接下來就是處理數(shù)據(jù)了,同樣要注意單位的不同,余額需要除以10e17才能轉(zhuǎn)換成正常的。
我們也可以監(jiān)控余額,比如當(dāng)充值到這個(gè)錢包,ETH余額大于10時(shí)實(shí)現(xiàn)提醒。
還有一大批數(shù)字貨幣是ETH上的ERC20代幣,如何獲得他們的余額呢?
在說明文檔中我們可以找到token一欄,有說明獲取地址為https://api.etherscan.io/api?module=account&action=tokenbalance&contractaddress=0x57d90b64a1a57749b0f932f1a3395792e12e7055&address=0xe04f27eb70e025b78871a2ad7eabe85e61212761&tag=latest&apikey=YourApiKeyToken。仔細(xì)對比你會(huì)發(fā)現(xiàn)比ETH余額多了個(gè)智能合約contractaddress地址,這個(gè)查詢方法也非常簡單,在https://etherscan.io搜索代幣,比如搜索OMG,就會(huì)出現(xiàn)合約地址。
這樣把三個(gè)輸入組成新的獲取地址,就能獲得代幣的余額。你要查詢的以太坊地址address、你申請的apikey、代幣的合約地址contractaddress。我們可以把這三個(gè)設(shè)成變量,方便更改。
完整代碼如下:
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 # 科學(xué)計(jì)數(shù)法,處理返回?cái)?shù)據(jù) ban2 = float(response2.json()['result']) / 10e17 # 科學(xué)計(jì)數(shù)法,處理返回?cái)?shù)據(jù) 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("查詢出錯(cuò),繼續(xù)嘗試", order_err) time.sleep(3)
二,不提供API的區(qū)塊瀏覽器
這種方法稍微復(fù)雜,需要爬蟲來獲取地址。
我們以最近有點(diǎn)火的chainx代幣PCX為例來說明,因?yàn)檫@個(gè)幣種采取了鎖倉BTC挖礦來獲得其代幣PCX,而要想提取利息需要拿利息約11倍的PCX去投票,簡單說就是讓你去買PCX,我在其內(nèi)網(wǎng)(鏈上交易)掛低價(jià)單來買,什么時(shí)候成交希望有個(gè)提醒,那就用程序監(jiān)控區(qū)塊瀏覽器我地址的余額,一旦成交立馬投票去拿利息。
沒經(jīng)歷過上面的朋友可能覺得很復(fù)雜,沒關(guān)系,我們的目的就是用程序獲取其錢包余額。
PCX區(qū)塊瀏覽器地址為https://scan.chainx.org/,輸入錢包地址之后就可以獲得賬戶詳情,怎么用程序獲得余額呢?
在谷歌瀏覽器下按F12,進(jìn)入開發(fā)者模式,點(diǎn)擊Network、XHR,然后刷新。
我們發(fā)現(xiàn)在balance一樣展開有余額信息,那我們只要找到請求頭部信息就能獲得了
點(diǎn)擊Headers找到需要的信息,如下
這樣我們就可以獲得相關(guān)信息,然后對數(shù)據(jù)進(jìn)行處理即可。
我當(dāng)時(shí)設(shè)定的是購買35個(gè),所以當(dāng)數(shù)量大于30時(shí)用釘釘通知我。
完整代碼如下
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個(gè)就改成[0] print('PCX', PCX) if PCX > 30: print('PCX', PCX) content = 'PCX購買已到賬,余額為' + str(PCX) # 發(fā)一個(gè)變量,用str轉(zhuǎn)換下 send_msg1 = send_dingding_msg1(content) print(send_msg1) break time.sleep(3) except Exception as order_err: print("查詢出錯(cuò),繼續(xù)嘗試", order_err) time.sleep(3)
其它不提供API的區(qū)塊瀏覽器獲取方式是一樣的。
有了以上的方法,我們就可以用程序獲得任 意區(qū)塊瀏覽器地址的余額,并進(jìn)行監(jiān)控了。
總結(jié)
以上所述是小編給大家介紹的使用Python調(diào)取任意數(shù)字資產(chǎn)錢包余額功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
相關(guān)文章
總結(jié)Python連接CS2000的詳細(xì)步驟
今天給大家?guī)淼氖顷P(guān)于Python的相關(guān)知識,文章圍繞著Python連接CS2000的詳細(xì)步驟展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06Python輕量級ORM框架Peewee訪問sqlite數(shù)據(jù)庫的方法詳解
這篇文章主要介紹了Python輕量級ORM框架Peewee訪問sqlite數(shù)據(jù)庫的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了ORM框架的概念、功能及peewee的安裝、使用及操作sqlite數(shù)據(jù)庫的方法,需要的朋友可以參考下2017-07-07Python reques接口測試框架實(shí)現(xiàn)代碼
這篇文章主要介紹了Python reques接口測試框架實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07對python numpy數(shù)組中冒號的使用方法詳解
下面小編就為大家分享一篇對python numpy數(shù)組中冒號的使用方法詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04淺析Python中正則表達(dá)式函數(shù)search()和match()的使用
在Python中,正則表達(dá)式是處理字符串的強(qiáng)大工具,search()和match()是Python標(biāo)準(zhǔn)庫中re模塊中兩個(gè)常用的正則表達(dá)式方法,本文將詳細(xì)講解這兩個(gè)方法的使用,需要的可以參考一下2023-08-08Python scipy的二維圖像卷積運(yùn)算與圖像模糊處理操作示例
這篇文章主要介紹了Python scipy的二維圖像卷積運(yùn)算與圖像模糊處理操作,涉及Python數(shù)學(xué)運(yùn)算與圖形繪制相關(guān)操作技巧,需要的朋友可以參考下2019-09-09Python利用內(nèi)置庫實(shí)現(xiàn)數(shù)據(jù)的加密與校驗(yàn)
這篇文章主要為大家詳細(xì)介紹了如何使用Python內(nèi)置庫實(shí)現(xiàn)數(shù)據(jù)的加密和校驗(yàn),為開發(fā)者提供全方位的數(shù)據(jù)安全解決方案,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12