Maison >interface Web >js tutoriel >Suivi automatisé des prix des cryptomonnaies à l'aide de GMAIL et Python

Suivi automatisé des prix des cryptomonnaies à l'aide de GMAIL et Python

DDD
DDDoriginal
2024-12-07 00:02:13974parcourir

Suivez-vous manuellement les valeurs des crypto-monnaies ?
Souhaitez-vous être averti par e-mail lorsque la valeur de votre crypto-monnaie augmente ou diminue d'une valeur spécifique ?
Voulez-vous arrêter d'aller sur les sites Web d'échange de crypto-monnaies juste pour voir la valeur de la pièce ?

Si vous avez répondu « Oui », alors vous êtes au bon endroit.

Que vous soyez un trader chevronné ou un passionné de crypto, il est crucial de rester informé des derniers prix. Heureusement, Python peut vous aider à automatiser ce processus, vous faisant ainsi gagner du temps et des efforts.

Dans cet article, je vais vous présenter un simple script Python qui suit la valeur de n'importe quelle crypto-monnaie sur un échange spécifique en temps réel.


Pourquoi automatiser le suivi des prix des cryptomonnaies ?

Les marchés des crypto-monnaies fonctionnent 24h/24 et 7j/7 et les prix peuvent changer en quelques secondes. En automatisant le processus de suivi, vous pouvez :

  1. Restez informé des mouvements du marché en temps réel.
  2. Éliminez l'actualisation manuelle des pages d'échange.
  3. Recevez une notification lorsque le prix est modifié dans une plage spécifique.

Exigences

Pour suivre, assurez-vous d'avoir les éléments suivants :

  1. Python installé sur votre système
  2. Connaissance de base de Python et installation de bibliothèques
  3. Mot de passe de l'application du compte Google généré
  4. Google Chrome installé

Le code

Il y a trois fichiers :

  1. app.py -> scénario principal
  2. crypto-monnaies.json -> où vous définissez les pièces que vous suivez
  3. email_template -> code pour la conception de votre email

Le code entier peut être trouvé dans cet aperçu GitHub.

Remarque : le code pourrait être remanié pour améliorer la lisibilité et l'efficacité, mais l'accent principal ici est mis sur la fonctionnalité.

Remarque : dans cet exemple, j'ai utilisé "Kraken" comme échange cryptographique où je suis les prix.


Exemple de notification par e-mail :

Lorsque la valeur de la pièce (par exemple) Polkadot augmente de 1 EUR, vous recevez une notification par e-mail comme celle-ci :

Automated crypto price tracking using GMAIL and Python


Explication du code

Importez les bibliothèques nécessaires.

  1. sélénium : automatise les actions du navigateur Web (par exemple, récupérer les prix des crypto-monnaies).
  2. webdriver_manager : gère automatiquement les installations de ChromeDriver.
  3. fake_headers : génère des en-têtes d'agent utilisateur réalistes pour le navigateur.
  4. smtplib : gère la fonctionnalité d'envoi d'e-mails.
  5. dotenv : charge les variables d'environnement (par exemple, les informations d'identification de messagerie).
  6. os, time, json : gérez les opérations sur les fichiers, les retards et l'analyse JSON.

Charger les variables d'environnement

load_dotenv()

Charge des variables telles que les informations d'identification de messagerie (MOT DE PASSE) à partir d'un fichier .env pour une manipulation sécurisée.

Fonction d'envoi d'e-mails

load_dotenv()

Objectif : envoie une notification par e-mail au format HTML lorsque les seuils de prix sont atteints.
Charge le modèle d'e-mail à partir d'un fichier externe (email_template.html).

Fonctions d'assistance

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

Objectif : ajoute un délai pour éviter les requêtes excessives vers le site Web cible, évitant ainsi la détection en tant que bot.

def delay():
    time.sleep(2)

Objectif : charge les détails de la crypto-monnaie (par exemple, nom, URL, imagesrc) à partir d'un fichier JSON.

Configurer les options de sélénium

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

Objectif : configure un navigateur Chrome sans tête pour récupérer les prix des crypto-monnaies.

sans tête : exécute Chrome sans interface graphique.
Agent utilisateur personnalisé : imite l'utilisation réelle du navigateur pour une meilleure évasion de la détection des robots.

Boucle principale - Suivi des prix

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. Parcourt chaque crypto-monnaie à partir du fichier cryptocurrencies.json.
  2. Construit l'URL pour récupérer les données de prix.
  3. Utilise du sélénium pour extraire le prix du site Web cible.

Processus gratté Prix

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

Analyse le texte du prix et le convertit en flottant pour comparaison et calcul

Comparer les prix

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

Récupère le dernier prix enregistré à partir d'un fichier texte. S'il n'existe pas, cela suppose qu'il n'y a aucune donnée antérieure.
Calcule le changement de prix (price_change).

Déclencher des notifications

        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

Définit les seuils pour les notifications de changement de prix :

  1. Si prix < 100, notifie les changements ≥1 EUR.
  2. Sinon, notifie les changements ≥5 EUR.

Remarque : si vous souhaitez suivre des pièces avec plus de chiffres, vous devez l'adapter ici.

Mettre à jour le prix enregistré

        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)

Enregistre le prix actuel dans le fichier texte pour des comparaisons futures.

Gestion des exceptions

with open(previous_price_file, 'w') as file:
            file.write(str(price))

Nettoyage

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

Ferme l'instance du navigateur une fois toutes les tâches terminées.


Comment faire en sorte que cela fonctionne ?

  1. Faites une tâche cron sur votre PC
  2. Faire une tâche cron sur le serveur

Pour mettre cela en action une fois par heure, ajoutez ceci :

driver.quit()
crontab -e

Conclusion

En suivant ce guide, vous pouvez suivre les prix des cryptomonnaies et recevoir des notifications par e-mail en temps réel pendant que vous dormez !

Si vous avez trouvé cet article utile ou si vous avez des idées pour améliorer le script, n'hésitez pas à laisser un commentaire ci-dessous ?

Bon codage et trading réussi !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn