Rumah > hujung hadapan web > tutorial js > Penjejakan harga crypto automatik menggunakan GMAIL dan Python

Penjejakan harga crypto automatik menggunakan GMAIL dan Python

DDD
Lepaskan: 2024-12-07 00:02:13
asal
978 orang telah melayarinya

Adakah anda menjejaki nilai mata wang crypto secara manual?
Adakah anda ingin dimaklumkan melalui e-mel apabila nilai mata wang crypto anda naik atau turun mengikut nilai tertentu?
Adakah mahu berhenti pergi ke tapak web pertukaran crypto hanya untuk melihat nilai syiling?

Jika anda menjawab dengan 'Ya', maka, anda berada di tempat yang betul.

Sama ada anda seorang peniaga berpengalaman atau peminat kripto, sentiasa dikemas kini dengan harga terkini adalah penting. Syukurlah, Python boleh membantu mengautomasikan proses ini, menjimatkan masa dan usaha anda.

Dalam siaran ini, saya akan membimbing anda melalui skrip Python mudah yang menjejaki nilai mana-mana mata wang kripto pada pertukaran tertentu dalam masa nyata.


Mengapa Automatikkan Penjejakan Harga Kripto?

Pasaran mata wang kripto beroperasi 24/7, dan harga boleh berubah dalam beberapa saat. Dengan mengautomasikan proses penjejakan, anda boleh:

  1. Kekal dimaklumkan tentang pergerakan pasaran dalam masa nyata.
  2. Hapuskan muat semula manual halaman pertukaran.
  3. Dapatkan pemberitahuan apabila harga ditukar dalam julat tertentu.

Keperluan

Untuk mengikuti, pastikan anda mempunyai perkara berikut:

  1. Python dipasang pada sistem anda
  2. Pengetahuan asas Python dan memasang perpustakaan
  3. Kata laluan apl akaun Google yang dijana
  4. Dipasang Google Chrome

Kod

Terdapat tiga fail:

  1. app.py -> skrip utama
  2. mata wang kripto.json -> tempat anda menentukan syiling yang anda jejaki
  3. email_template -> kod untuk reka bentuk e-mel anda

Keseluruhan kod boleh ditemui dalam intipati GitHub ini.

Nota: Kod boleh difaktorkan semula untuk meningkatkan kebolehbacaan dan kecekapan, tetapi tumpuan utama di sini adalah pada kefungsian.

Nota: Dalam contoh ini saya menggunakan "Kraken" sebagai pertukaran kripto di mana saya mengikuti harga.


Contoh Pemberitahuan E-mel:

Apabila nilai (contohnya) syiling Polkadot meningkat sebanyak 1 EUR, anda menerima pemberitahuan e-mel seperti ini:

Automated crypto price tracking using GMAIL and Python


Penjelasan kod

Import perpustakaan yang diperlukan.

  1. selenium: Mengautomasikan tindakan pelayar web (cth., mengambil harga mata wang kripto).
  2. webdriver_manager: Mengurus pemasangan ChromeDriver secara automatik.
  3. fake_headers: Menjana pengepala ejen pengguna yang realistik untuk penyemak imbas.
  4. smtplib: Mengendalikan fungsi penghantaran e-mel.
  5. dotenv: Memuatkan pembolehubah persekitaran (cth., kelayakan e-mel).
  6. os, masa, json: Mengendalikan operasi fail, kelewatan dan penghuraian JSON.

Pembolehubah Persekitaran Beban

load_dotenv()
Salin selepas log masuk
Salin selepas log masuk

Memuatkan pembolehubah seperti bukti kelayakan e-mel (KATA LALUAN) daripada fail .env untuk pengendalian yang selamat.

Fungsi Menghantar E-mel

load_dotenv()
Salin selepas log masuk
Salin selepas log masuk

Tujuan: Menghantar pemberitahuan e-mel berformat HTML apabila ambang harga dipenuhi.
Memuatkan templat e-mel daripada fail luaran (email_template.html).

Fungsi Pembantu

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()
Salin selepas log masuk

Tujuan: Menambah kelewatan untuk mengelakkan permintaan yang berlebihan ke tapak web sasaran, mengelakkan pengesanan sebagai bot.

def delay():
    time.sleep(2)
Salin selepas log masuk

Tujuan: Memuatkan butiran mata wang kripto (cth., nama, url, imagesrc) daripada fail JSON.

Konfigurasikan Pilihan Selenium

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

Tujuan: Menyediakan penyemak imbas Chrome tanpa kepala untuk mengikis harga mata wang kripto.

tanpa kepala: Menjalankan Chrome tanpa GUI.
Ejen Pengguna Tersuai: Meniru penggunaan penyemak imbas sebenar untuk pengelakan pengesanan bot yang lebih baik.

Gelung Utama - Penjejakan Harga

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)
Salin selepas log masuk
  1. Lelaran melalui setiap mata wang kripto daripada fail mata wang kripto.json.
  2. Membina URL untuk mengambil data harga.
  3. Menggunakan selenium untuk mengikis harga dari tapak web sasaran.

Harga Dikikis Proses

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")
Salin selepas log masuk

Menghuraikan teks harga dan menukarnya menjadi apungan untuk perbandingan dan pengiraan

Bandingkan Harga

 price = price_element.text.strip().replace('€', '').replace(',', '.')
        try:
            price = float(price)
        except ValueError:
            print(f"Error while conversion price for {currency['name']}: {price}")
            continue
Salin selepas log masuk

Mengambil harga terakhir disimpan daripada fail teks. Jika ia tidak wujud, andaikan tiada data sebelumnya.
Mengira perubahan harga (perubahan_harga).

Pemberitahuan Pencetus

        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
Salin selepas log masuk

Tetapkan ambang untuk pemberitahuan perubahan harga:

  1. Jika harga < 100, memberitahu tentang perubahan ≥1 EUR.
  2. Jika tidak, maklumkan tentang perubahan ≥5 EUR.

Nota: Jika anda ingin menjejak syiling dengan lebih banyak digit, anda perlu menyesuaikannya di sini.

Kemas kini Harga Tersimpan

        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)
Salin selepas log masuk

Menyimpan harga semasa ke fail teks untuk perbandingan pada masa hadapan.

Pengendalian Pengecualian

with open(previous_price_file, 'w') as file:
            file.write(str(price))
Salin selepas log masuk

Pembersihan

    except Exception as e:
        print(f"Error occured for {currency['name']}: {e}")
Salin selepas log masuk

Menutup tika penyemak imbas selepas semua tugasan selesai.


Bagaimana untuk membuat ini berfungsi?

  1. Buat kerja cron pada PC anda
  2. Buat tugas cron pada pelayan

Untuk membuat ini dalam tindakan sekali setiap jam tambahkan ini:

driver.quit()
Salin selepas log masuk
crontab -e
Salin selepas log masuk

Kesimpulan

Dengan mengikuti panduan ini, anda boleh menjejaki harga mata wang kripto dan menerima pemberitahuan e-mel masa nyata semasa anda tidur!

Jika anda mendapati siaran ini membantu atau mempunyai idea untuk menambah baik skrip, sila tinggalkan ulasan di bawah ?

Selamat pengekodan dan perdagangan yang berjaya!

Atas ialah kandungan terperinci Penjejakan harga crypto automatik menggunakan GMAIL dan Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan