首页 > web前端 > js教程 > 使用 GMAIL 和 Python 自动跟踪加密货币价格

使用 GMAIL 和 Python 自动跟踪加密货币价格

DDD
发布: 2024-12-07 00:02:13
原创
997 人浏览过

您是否手动跟踪加密货币价值?
当您的加密货币价值上涨或下跌特定值时,您想通过电子邮件收到通知吗?
不想再仅仅为了查看代币的价值而访问加密货币交易网站吗?

如果您回答“是”,那么您来对地方了。

无论您是经验丰富的交易者还是加密货币爱好者,了解最新价格都至关重要。值得庆幸的是,Python 可以帮助自动化此过程,从而节省您的时间和精力。

在这篇文章中,我将引导您完成一个简单的 Python 脚本,该脚本可以实时跟踪特定交易所上任何加密货币的价值。


为什么要自动化加密货币价格跟踪?

加密货币市场 24/7 运行,价格可能在几秒钟内发生变化。通过自动化跟踪过程,您可以:

  1. 随时了解实时市场动态。
  2. 消除手动刷新交易页面。
  3. 当价格在特定范围内变动时收到通知。

要求

要继续进行操作,请确保您具备以下条件:

  1. 您的系统上已安装 Python
  2. Python基础知识和安装库
  3. 生成的Google帐户应用程序密码
  4. 已安装 Google Chrome

守则

共有三个文件:

  1. 应用程序.py->主要脚本
  2. 加密货币.json ->您可以在其中定义要跟踪的代币
  3. 电子邮件_模板 ->您的电子邮件设计代码

完整代码可以在这个 GitHub gist 中找到。

注意:可以重构代码以提高可读性和效率,但这里的主要重点是功能。

注意:在这个例子中,我使用“Kraken”作为加密货币交易所,我跟踪价格。


电子邮件通知示例:

当(例如)Polkadot 币的价值增加 1 欧元时,您会收到如下电子邮件通知:

Automated crypto price tracking using GMAIL and Python


代码解释

导入必要的库。

  1. selenium:自动化网络浏览器操作(例如,获取加密货币价格)。
  2. webdriver_manager:自动管理 ChromeDriver 安装。
  3. fake_headers:为浏览器生成真实的用户代理标头。
  4. smtplib:处理电子邮件发送功能。
  5. dotenv:加载环境变量(例如电子邮件凭据)。
  6. os、time、json:处理文件操作、延迟和JSON解析。

加载环境变量

load_dotenv()
登录后复制
登录后复制

从 .env 文件加载电子邮件凭据 (PASSWORD) 等变量以进行安全处理。

邮件发送功能

load_dotenv()
登录后复制
登录后复制

用途:当达到价格阈值时发送 HTML 格式的电子邮件通知。
从外部文件 (email_template.html) 加载电子邮件模板。

辅助函数

def send_email(subject, price, currency_name, image_url, price_change):
    sender_email = "your_email@gmail.com"
    receiver_email = "your_email@gmail.com"
    password = os.getenv("PASSWORD") -> here you need to type your generated google account app password

    msg = MIMEMultipart()
    msg['From'] = sender_email
    msg['To'] = receiver_email
    msg['Subject'] = subject

    if price_change > 0:
        change_emoji = "?"  
    elif price_change < 0:
        change_emoji = "?"  
    else:
        change_emoji = "⚖️"  

    with open('email_template.html', 'r', encoding='utf-8') as f:
        html_template = f.read()

    html_content = html_template.format(
       currency_name=currency_name,
       price=price,
       image_url=image_url,
       change_emoji=change_emoji
    )

    msg.attach(MIMEText(html, 'html'))

    try:
        server = smtplib.SMTP('smtp.gmail.com', 587)
        server.starttls()
        server.login(sender_email, password)
        server.sendmail(sender_email, receiver_email, msg.as_string())
        print("E-mail sent!")
    except Exception as e:
        print(f"Error occured: {e}")
    finally:
        server.quit()
登录后复制

目的:添加延迟以防止对目标网站的过多请求,避免被检测为机器人。

def delay():
    time.sleep(2)
登录后复制

用途:从 JSON 文件加载加密货币详细信息(例如名称、url、imagesrc)。

配置 Selenium 选项

def load_cryptocurrencies():
    with open('cryptocurrencies.json', 'r') as f:
        return json.load(f)
登录后复制

用途:设置一个无头 Chrome 浏览器来抓取加密货币价格。

headless:在没有 GUI 的情况下运行 Chrome。
自定义用户代理:模仿真实的浏览器使用情况,以更好地规避机器人检测。

主循环 - 价格跟踪

chrome_options = Options()
header = Headers(browser="chrome", os="win", headers=False)
customUserAgent = header.generate()['User-Agent']
chrome_options.add_argument(f"user-agent={customUserAgent}")
chrome_options.add_argument("--headless")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
登录后复制
  1. 迭代 cryptocurrencies.json 文件中的每种加密货币。
  2. 构造 URL 以获取价格数据。
  3. 使用 Selenium 从目标网站抓取价格。

处理报废价格

cryptocurrencies = load_cryptocurrencies()

for currency in cryptocurrencies:
    try:
        url = f"https://www.kraken.com/prices/{currency['url']}"
        driver.get(url)
        delay()

        price_element = driver.find_element(By.CLASS_NAME, "asset-price.black-color")
登录后复制

解析价格文本并将其转换为浮点数进行比较和计算

比较价格

 price = price_element.text.strip().replace('€', '').replace(',', '.')
        try:
            price = float(price)
        except ValueError:
            print(f"Error while conversion price for {currency['name']}: {price}")
            continue
登录后复制

从文本文件中检索上次保存的价格。如果不存在,则假设没有以前的数据。
计算价格变化 (price_change)。

触发通知

        previous_price_file = f"previous_price_{currency['url']}.txt"
        try:
            with open(previous_price_file, 'r') as file:
                previous_price = float(file.read().strip())
        except FileNotFoundError:
            previous_price = None

        price_change = price - previous_price
登录后复制

设置价格变更通知的阈值:

  1. 如果价格< 100,变更通知 ≥1 欧元。
  2. 否则,更改 ≥5 欧元时通知。

注意:如果您想跟踪更多位数的硬币,您需要在此处进行调整。

更新保存的价格

        if previous_price is not None:
            if price < 100:
                if abs(price - previous_price) >= 1:
                    subject = f"New price {currency['name']}: {price}"
                    send_email(subject, price, currency['name'], currency['imagesrc'], price_change)
            else:
                if abs(price - previous_price) >= 5:
                    subject = f"New price {currency['name']}: {price}"
                    send_email(subject, price, currency['name'], currency['imagesrc'], price_change)
登录后复制

将当前价格保存到文本文件以供将来比较。

异常处理

with open(previous_price_file, 'w') as file:
            file.write(str(price))
登录后复制

清理

    except Exception as e:
        print(f"Error occured for {currency['name']}: {e}")
登录后复制

所有任务完成后关闭浏览器实例。


如何使这项工作有效?

  1. 在你的电脑上进行 cron 作业
  2. 在服务器上进行 cron 作业

要使其每小时运行一次,请添加以下内容:

driver.quit()
登录后复制
crontab -e
登录后复制

结论

按照本指南,您可以跟踪加密货币价格并在睡觉时接收实时电子邮件通知!

如果您觉得这篇文章有帮助或者有改进脚本的想法,请随时在下面发表评论?

祝您编码愉快,交易成功!

以上是使用 GMAIL 和 Python 自动跟踪加密货币价格的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板