首頁 > web前端 > js教程 > 使用 GMAIL 和 Python 自動追蹤加密貨幣價格

使用 GMAIL 和 Python 自動追蹤加密貨幣價格

DDD
發布: 2024-12-07 00:02:13
原創
978 人瀏覽過

您是否手動追蹤加密貨幣價值?
當您的加密貨幣價值上漲或下跌特定值時,您想透過電子郵件收到通知嗎?
不想再僅僅為了查看代幣的價值而訪問加密貨幣交易網站嗎?

如果您回答“是”,那麼您來對地方了。

無論您是經驗豐富的交易者還是加密貨幣愛好者,了解最新價格都至關重要。值得慶幸的是,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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板