ホームページ >ウェブフロントエンド >jsチュートリアル >GMAIL と Python を使用した自動仮想通貨価格追跡

GMAIL と Python を使用した自動仮想通貨価格追跡

DDD
DDDオリジナル
2024-12-07 00:02:13977ブラウズ

暗号通貨の価値を手動で追跡しますか?
暗号通貨の価値が特定の値だけ上昇または下降したときに電子メールで通知を受け取りたいですか?
コインの価値を確認するためだけに仮想通貨交換ウェブサイトにアクセスするのをやめたいですか?

「はい」と答えた場合は、正しい場所にいます。

あなたが経験豊富なトレーダーであっても、仮想通貨愛好家であっても、最新の価格を常に最新の状態に保つことが重要です。ありがたいことに、Python はこのプロセスを自動化し、時間と労力を節約できます。

この投稿では、特定の取引所での暗号通貨の価値をリアルタイムで追跡する簡単な Python スクリプトについて説明します。


仮想通貨の価格追跡を自動化する理由

暗号通貨市場は年中無休で運営されており、価格は数秒で変化する可能性があります。追跡プロセスを自動化すると、次のことが可能になります。

  1. 市場の動きについてリアルタイムで最新情報を入手します。
  2. 交換ページの手動更新を排除します。
  3. 特定の範囲で価格が変更されたときに通知を受け取ります。

要件

この手順を進めるには、次のものが揃っていることを確認してください:

  1. システムにインストールされている Python
  2. Python とライブラリのインストールに関する基本的な知識
  3. 生成された Google アカウント アプリのパスワード
  4. Google Chrome をインストールしました

コード

次の 3 つのファイルがあります:

  1. app.py ->メインスクリプト
  2. 暗号通貨.json ->どのコインを追跡するかを定義する場所
  3. email_template ->メールデザインのコード

コード全体は、この GitHub gist にあります。

注: 読みやすさと効率を向上させるためにコードをリファクタリングすることもできますが、ここでは主に機能に焦点を当てています。

注: この例では、価格を追跡する暗号交換として「Kraken」を使用しました。


電子メール通知の例:

(たとえば)Polkadot コインの価値が 1 ユーロ増加すると、次のような電子メール通知が届きます:

Automated crypto price tracking using GMAIL and Python


コードの説明

必要なライブラリをインポートします。

  1. selenium: Web ブラウザのアクションを自動化します (暗号通貨価格の取得など)。
  2. webdriver_manager: ChromeDriver のインストールを自動的に管理します。
  3. fake_headers: ブラウザー用の現実的なユーザー エージェント ヘッダーを生成します。
  4. smtplib: 電子メール送信機能を処理します。
  5. dotenv: 環境変数 (電子メール認証情報など) をロードします。
  6. os、time、json: ファイル操作、遅延、JSON 解析を処理します。

環境変数をロードする

load_dotenv()

安全に処理するために、電子メール認証情報 (PASSWORD) などの変数を .env ファイルからロードします。

メール送信機能

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()

目的: ターゲット Web サイトへの過剰なリクエストを防止するために遅延を追加し、ボットとして検出されるのを回避します。

def delay():
    time.sleep(2)

目的: JSON ファイルから暗号通貨の詳細 (名前、URL、imagesrc など) を読み込みます。

Selenium オプションの構成

def load_cryptocurrencies():
    with open('cryptocurrencies.json', 'r') as f:
        return json.load(f)

目的: 暗号通貨の価格を収集するためにヘッドレス Chrome ブラウザをセットアップします。

ヘッドレス: 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. cryptocurrency.json ファイルの各暗号通貨を反復処理します。
  2. 価格データを取得するための URL を構築します。
  3. セレンを使用してターゲット Web サイトから価格を収集します。

プロセススクレイピング価格

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. PC で cron ジョブを作成します
  2. サーバー上で cron ジョブを作成します

これを 1 時間に 1 回実行するには、これを追加します:

driver.quit()
crontab -e

結論

このガイドに従うことで、就寝中に仮想通貨の価格を追跡し、リアルタイムの電子メール通知を受け取ることができます!

この投稿が役に立った、またはスクリプトを改善するアイデアがある場合は、お気軽に以下にコメントを残してください?

コーディングを楽しんで、取引を成功させてください!

以上がGMAIL と Python を使用した自動仮想通貨価格追跡の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。