如何修改Python代码,仅在API返回结果与上一次不同时打印内容
实现方案
你可以通过本地缓存上一次请求的结果,每次运行时做对比判断是否需要打印,修改后的代码如下:
import requests import json from decimal import Decimal # 原有配置参数保持不变即可 tx_sell = "你的卖出地址1" tx_sell2 = "你的卖出地址2" person1 = {"address": "你的查询地址"} APIKEY = "你的bscscan接口密钥" # 新增:上一次结果的缓存文件路径 CACHE_FILE = "last_bsc_result.json" api_url= "https://api.bscscan.com/api?module=account&action=tokentx&contractaddress=smartcontract&address=" + person1["address"] + \ "&startblock=10290674&endblock=999999999&page=1&offset=1&sort=desc&apikey=" + APIKEY response = requests.get(api_url) address_content = response.json() result = address_content.get("result") # 新增:结果对比逻辑 current_result_str = json.dumps(result, sort_keys=True) has_change = True # 读取上次缓存的结果 try: with open(CACHE_FILE, "r", encoding="utf-8") as f: last_result_str = f.read() if current_result_str == last_result_str: has_change = False except FileNotFoundError: # 首次运行无缓存,默认有更新 pass # 仅当结果有变化时执行打印逻辑 if has_change: # 更新缓存 with open(CACHE_FILE, "w", encoding="utf-8") as f: f.write(current_result_str) # 原有打印逻辑保持不变 for n, transaction in enumerate(result): block = transaction.get("blockNumber") hash = transaction.get("hash") tx_from = transaction.get("from") tx_to = transaction.get("to") value = transaction.get("value") confirmations = transaction.get("confirmations") # 注:原有代码两次给coin_value赋值,后面的赋值会覆盖前面的,按需保留需要的计算逻辑即可 # coin_value = Decimal(value)/1000000000000000000 coin_value = int(value)/1000000000 print("COIN", coin_value) print("\n") if tx_to in (tx_sell, tx_sell2): print("sell") elif tx_from in (tx_sell, tx_sell2): print("buy")
核心逻辑说明
- 用
json.dumps把接口返回的result序列化为字符串,加sort_keys=True避免因为键的排序不同导致的误判 - 每次运行先读取本地缓存的上次结果字符串,和本次的做对比,完全一致就跳过所有打印逻辑
- 结果有变化时先更新缓存,再执行打印操作
- 第一次运行没有缓存文件时默认会正常打印,后续重复运行如果结果不变就不会输出内容
内容的提问来源于stack exchange,提问作者hammad99
相关产品推荐
相关产品推荐

