見出し画像

指定したETHアドレスが取引したらLINEに通知するコード

指定したETHアドレスが取引をしたらLINEにdebankのアドレスと
一緒に通知が行きます。

以下の数値を自分用に変えてください
etherscan_api_key
wallet_address=監視対象のアドレス
line_token

import requests
import time
from datetime import datetime, timedelta

def get_latest_transaction(wallet_address):
    etherscan_api_key = "etherscan_api_key"
    url = f"https://api.etherscan.io/api?module=account&action=txlist&address={wallet_address}&startblock=0&endblock=99999999&page=1&offset=10&sort=desc&apikey={etherscan_api_key}"
    response = requests.get(url)
    transactions = response.json().get('result', [])
    return transactions[0] if transactions else None

def send_line_notification(wallet_address, transaction, line_token):
    url = "https://notify-api.line.me/api/notify"
    headers = {"Authorization": f"Bearer {line_token}"}
    profile_url = f"https://debank.com/profile/{wallet_address}"
    timestamp = int(transaction['timeStamp'])
    transaction_time = datetime.utcfromtimestamp(timestamp) + timedelta(hours=9) # UTC+9に変換
    formatted_time = transaction_time.strftime('%Y-%m-%d %H:%M:%S') # 日時のフォーマット
    message = f"新しい取引が検出されました: {profile_url}\n取引日時: {formatted_time}" # 日時をメッセージに追加
    data = {"message": message}
    requests.post(url, headers=headers, data=data)

wallet_address = "target address"
line_token = "line_token"
last_transaction_hash = None

while True:
    latest_transaction = get_latest_transaction(wallet_address)
    if latest_transaction and latest_transaction['hash'] != last_transaction_hash:
        send_line_notification(wallet_address, latest_transaction, line_token) # 取引情報を関数に渡す
        last_transaction_hash = latest_transaction['hash']
    time.sleep(60) # 1分ごとにチェック


いいなと思ったら応援しよう!