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
Libérer: 2024-12-07 00:02:13
original
975 Les gens l'ont consulté

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()
Copier après la connexion
Copier après la connexion

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()
Copier après la connexion
Copier après la connexion

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()
Copier après la connexion

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)
Copier après la connexion

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)
Copier après la connexion

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)
Copier après la connexion
  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")
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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)
Copier après la connexion

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))
Copier après la connexion

Nettoyage

    except Exception as e:
        print(f"Error occured for {currency['name']}: {e}")
Copier après la connexion

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()
Copier après la connexion
crontab -e
Copier après la connexion

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!

source:dev.to
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal