Rejoignez-Nous sur

Construire un bot Twitter pour automatiser la publication de nouvelles sur les crypto-monnaies avec Python [A Step-by-Step Guide]

photo 1583330638480 50271adb037e

News

Construire un bot Twitter pour automatiser la publication de nouvelles sur les crypto-monnaies avec Python [A Step-by-Step Guide]

photo 1583330638480 50271adb037e

photo par Yucel Moran

sur Unsplash

Imaginez votre propre Bot Twitter personnalisé affichant des mises à jour du marché en temps réel pour vos crypto-monnaies préférées. C'est possible avec Python, Tweepy, et LunarCRUSH. Ci-dessous, nous décrirons un processus étape par étape utilisant Python. Le bot tire des informations de LunarCRUSH. Les métriques pour Bitcoin, Ethereum, Litecoin sont stockées sous forme de variables formatées et tweetées automatiquement toutes les 30 minutes.

Configuration d'un compte de développement Twitter et de Tweepy

Commençons par installer Tweepy. C'est assez simple via le terminal en utilisant la commande pip:
Twitter for Developers donne accès à l'API Twitter afin de publier et d'analyser des tweets, d'optimiser les publicités et de créer des expériences client uniques. Vérifiez Documentation de l'API Twitter ici. Vous pouvez effectuer plusieurs tâches via cette API. Voir ci-dessous certains d'entre eux:

Publier et récupérer des tweetsSuivre et ne plus suivre les utilisateursPublier des messages directs

Avant de pouvoir utiliser les points de terminaison de l'API Twitter, créez un compte de développeur et générez vos clés d'API. Vous pouvez demander un compte développeur directement ici. Vous devez répondre aux questions sur la façon dont vous prévoyez d'utiliser l'API et accepter le contrat de développeur Twitter, puis vous aurez accès au tableau de bord du développeur.
Une fois que vous avez approuvé l'accès aux développeurs pour Twitter, connectez-vous au site développeur et créez votre application. Cette étape générera automatiquement vos clés API client et vos jetons d'accès, rappelez-vous, vous devez les garder secrets:
KTEJnDhnIKRDwTvEqcpOyOu82RD3 gs1p3yez

Le compte développeur doit être lié au compte Twitter sur lequel vous souhaitez activer le bot. Depuis la plateforme de développement Twitter, vous pouvez modifier les autorisations de l'application. Dans mon exemple, j'ai accordé à mon application la permission de lire, écrire et envoyer des messages directs.

Introduction à LunarCRUSH – Écoute sociale pour Crypto

Pour commencer à tirer parti des informations sociales sur les crypto-monnaies, vous devez vous diriger vers LunarCRUSH.com et créer un compte.
KTEJnDhnIKRDwTvEqcpOyOu82RD3

Dans la navigation de gauche, accédez à Développeurs et sélectionnez Documents API.

KTEJnDhnIKRDwTvEqcpOyOu82RD3 qdat3yig

Générer la clé API V2

KTEJnDhnIKRDwTvEqcpOyOu82RD3 9q23yap

Une fois que vous êtes dans les documents API, générez votre clé API V2.

Construire un bot Twitter avec Python, Tweepy, LunarCRUSH

Commençons à construire notre robot Twitter. Comme mentionné précédemment, vous utiliserez le Bibliothèque Tweepy qui fonctionne parfaitement avec l'API Twitter et l'API LunarCRUSH / LunarSTREAM ™.

Tout d'abord, importez tweepy. Tweepy facilite l'authentification auprès de l'API via nos clés secrètes Twitter App.

Voici un extrait de code, faites-le en créant un OAuthHandler par exemple pour gérer notre connexion contourner la clé et le secret du consommateur comme arguments.

Afin de pouvoir faire des demandes à l'API, renvoyez un jeton d'accès. Utilisez le auth.set_access_token pour stocker le jeton de demande d'accès pour notre session.

Maintenant, vous êtes prêt à contrôler notre compte Twitter avec Python. Notez que j'ai inclus "XXX ’ au lieu de mes vraies clés secrètes. Remplacer "XXX ’ avec vos clés secrètes que vous pouvez obtenir dans votre Tableau de bord des développeurs Twitter.
import tweepy
import urllib.request
import ssl
import json
import time
ssl._create_default_https_context = ssl._create_unverified_context
# Oauth keys
consumer_key ="XXX"
consumer_secret ="XXX"
access_token ="XXX"
access_token_secret ="XXX"
# Authentication with Twitter
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)

Notre variable api est l'endroit où vous stockez les paramètres d'authentification. Vous l'utiliserez pour faire des demandes à l'API Twitter.

L'idée de ce bot twitter est de publier un tweet différent, toutes les x minutes, avec des métriques de pièces / jetons de crypto-monnaie spécifiques. Cela peut être facilement fait en utilisant API LunarCRUSH & LUNARSTREAM ™.

Ajoutons nos clés API LunarCRUSH au code. Ajoutez simplement:

Vous êtes maintenant authentifié avec l'API LunarCRUSH. Il est temps de décider quelles crypto-monnaies vous souhaitez intégrer dans vos tweets. Utilisation coin_list pour stocker les différents symboles cryptographiques. Par exemple, «LTC» est Litecoin, «ETH» est Ethereum et «BTC» est Bitcoin.

# Allows adding as many coins as desired
coin_list = (
    "LTC",
    "ETH",
    "BTC"
)
coins = ','.join(coin_list)

Une liste des champs souhaités de la clé API est la clé LunarCRUSH, et la valeur est le nom du champ transmis à Twitter.

{"LUNAR_CRUSH_KEY": "RENDERED_NAME"}

Par exemple, pour ajouter des tweet_replies:

{"tweet_replies": "Tweet Replies: "},

vous ajouteriez ceci à la liste ci-dessous.

La compréhension des listes fournit un moyen concis de créer des listes. Les applications courantes consistent à créer de nouvelles listes où chaque élément est le résultat de certaines opérations appliquées à chaque membre d'une autre séquence ou itérable, ou à créer une sous-séquence de ces éléments qui satisfont à une certaine condition. –Documents sur les structures de données Python

Vous pouvez maintenant mapper les valeurs que vous souhaitez extraire de l'API LunarCRUSH. À mesure que le programme devient plus complexe, cela devrait être écrit de manière plus robuste.

map = (
    {"name":""},
    {"symbol": ""},
    {"price": " Price: "},
    {"percent_change_24h": " - 24 Hour Percent Change: "},
    {"market_cap": " Market Cap: "},
    {"volume_24h": " 24 Hour Volume: "},
    {"url_shares": " URL Shares: "},
    {"reddit_posts": " Reddit Posts: "},
    {"tweets": " Tweets: "},
    {"galaxy_score": " Galaxy Score: "},
    {"volatility": " Volatility: "},
    {"social_volume": " Social Volume: "},
    {"news": " News: "},
    {"close": " Close: "},
)
def final_render(asset_tweet, value, key, asset):
    if key == 'symbol':
        asset_tweet += " (" + asset(key) + ")"
    elif key == 'percent_change_24h':
        asset_tweet += value + str(asset(key)) + "%"
    else:
        asset_tweet += value + str(asset(key))
    return asset_tweet

Maintenant, parcourez chacun des champs de LunarCRUSH qui obtient la valeur de LunarCRUSH et la restitue avec le nom du champ.

def main():
url = "https://api.lunarcrush.com/v2?data=assets&key=" + api_key + "&symbol=" + coins
    assets = json.loads(urllib.request.urlopen(url).read())
for asset in assets('data'):
        asset_tweet = ""
        for field in map:
            key = list(field.keys())(0)
            value = list(field.values())(0)
            asset_tweet = final_render(asset_tweet, value, key, asset)
        print(asset_tweet)
        print(len(asset_tweet))
        # Posts tweets
        api.update_status(status=asset_tweet)
# Runs main() every 30 minutes
while True:
    main()
    time.sleep(1800)

Code Python complet

import urllib.request
import ssl
import json
import time
import tweepy
ssl._create_default_https_context = ssl._create_unverified_context
# Oauth keys
consumer_key ="XXX"
consumer_secret ="XXX"
access_token ="XXX"
access_token_secret ="XXX"
# Authentication with Twitter
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
#LunarCRUSH API Key
api_key = "XXX"
# Allows adding as many coins as desired
coin_list = (
    "LTC",
    "ETH",
    "BTC"
)
coins = ','.join(coin_list)
# A list of the fields desired from the API - key is the Lunar Crush key, and the value is the field name outputted to Twitter
# {"LUNAR_CRUSH_KEY": "RENDERED_NAME"}
# For example, to add tweet_replies, you would add:
# {"tweet_replies": "Tweet Replies: "},
# to the list below.
map = (
    {"name":""},
    {"symbol": ""},
    {"price": " Price: "},
    {"percent_change_24h": " - 24 Hour Percent Change: "},
    {"market_cap": " Market Cap: "},
    {"volume_24h": " 24 Hour Volume: "},
    {"url_shares": " URL Shares: "},
    {"reddit_posts": " Reddit Posts: "},
    {"tweets": " Tweets: "},
    {"galaxy_score": " Galaxy Score: "},
    {"volatility": " Volatility: "},
    {"social_volume": " Social Volume: "},
    {"news": " News: "},
    {"close": " Close: "},
)
def final_render(asset_tweet, value, key, asset):
    # As the program becomes more complex, this should be written in a more robust manner
    if key == 'symbol':
        asset_tweet += " (" + asset(key) + ")"
    elif key == 'percent_change_24h':
        asset_tweet += value + str(asset(key)) + "%"
    else:
        asset_tweet += value + str(asset(key))
    return asset_tweet
# Iterates over each of the fields from Lunar Crush, gets the value from Lunar Crush and renders it with the field name
def main():
url = "https://api.lunarcrush.com/v2?data=assets&key=" + api_key + "&symbol=" + coins
    assets = json.loads(urllib.request.urlopen(url).read())
for asset in assets('data'):
        asset_tweet = ""
        for field in map:
            key = list(field.keys())(0)
            value = list(field.values())(0)
            asset_tweet = final_render(asset_tweet, value, key, asset)
        print(asset_tweet)
        print(len(asset_tweet))
        # Posts tweets
        api.update_status(status=asset_tweet)
# Runs main() every 30 minutes
while True:
    main()
    time.sleep(1800)

Exemple Crypto Twitter Bot Tweet

KTEJnDhnIKRDwTvEqcpOyOu82RD3 ehu3yhy

Fonctionnalités supplémentaires à inclure dans un robot Twitter LunarCRUSH + Python

Non seulement vous pouvez publier des tweets; notre LunarCRUSH Python Tweepy Twitter Bot peut effectuer des fonctionnalités supplémentaires.

Par exemple:

Extraire des informations sur un utilisateur Twitter particulier –Méthodes utilisateur

Options de configuration

Il est possible de configurer le bot pour extraire des fonctionnalités supplémentaires. Par exemple:

?key={API_KEY_HERE} - Required to render the widgets.
?symbol=BTC - Change the symbol that is displayed in the widgets.
?interval=1 Week - Change the time interval being displayed in the charts (default is 1 Week).
?price_correlation=true|false - Show a price line in addition to the selected metric (default = false)
?metric=galaxy_score - Change the timeseries metric being displayed (Metric widget only).
?animation=true|false - Show or hide component animations (default = true)
?theme={See themes section for instructions}
?scrolling=true|false (default = true) - Enable or disable scrolling on the widget inner content. Use this if you want to set scrolling=false on the iframe with a fixed height but still want to allow scrolling within the widget.

Vous avez la possibilité de configurer et d'ajouter toutes les métriques disponibles à partir de LunarCRUSH:

market_cap (Market Cap)
galaxy_score (Galaxy Score)
price_score (Price Score)
average_sentiment (Average Sentiment)
social_impact_score (Social Impact Score)
market_cap (Market Cap)
galaxy_score (Galaxy Score)
price_score (Price Score)
average_sentiment (Average Sentiment)
social_impact_score (Social Impact Score)
correlation_rank (Correlation Rank)
volatility (Volatility)
social_score (Social Volume)
social_volume (Social Volume)
twitter_volume (Twitter Volume)
reddit_volume (Reddit Volume)
news_volume (News Volume)
search_volume (Search Volume)
spam_volume (Spam Volume)
bullish_sentiment (Bullish Sentiment)
bearish_sentiment (Bearish Sentiment)

Metrics Widgets
average_sentiment (Average Sentiment)
correlation_rank (Correlation Rank)
galaxy_score (Galaxy Score)
market_cap (Market Cap)
market_cap_rank (Market Cap Rank)
news_articles (News Volume)
popular_tweet (Popular Tweets)
price_btc (Price BTC)
price_score (Price Score)
priceclose (Price Close)
pricehigh (Price High)
pricelow (Price Low)
priceopen (Price Open)
reddit_comment (Reddit Comments)
reddit_post (Reddit Posts)
reddit_post_reddit_comment (Reddit Volume)
search_average (Search Volume)
social_impact_score (Social Impact Score)
social_score (Social Volume)
tweet (Twitter Volume)
tweet_sentiment1 (Very Bearish Sentiment)
tweet_sentiment2 (Bearish Sentiment)
tweet_sentiment2_tweet_sentiment (Negative Sentiment)
tweet_sentiment3 (Neutral Sentiment)
tweet_sentiment4 (Bullish Sentiment)
tweet_sentiment5 (Very Bullish Sentiment)
tweet_sentiment4_sentiment5 (Positive Sentiment)
tweet_sentiment_impact1 (Very Bearish Sentiment Impact)
tweet_sentiment_impact2 (Bearish Sentiment Impact)
tweet_sentiment_impact3 (Neutral Sentiment Impact)
tweet_sentiment_impact4 (Bullish Sentiment Impact)
tweet_sentiment_impact5 (Very Bullish Sentiment Impact)
tweet_spam (Spam Volume)
volatility (Volatility)
volumefrom (Market Volume Open)
volumeto (Market Volume Close)

Dernières pensées

En quelques lignes de code, votre bot Twitter facilement configurable extrait désormais les données de LunarCRUSH et engage automatiquement votre public avec des informations sociales fiables en temps réel.

Il y a quelques choses qui peuvent être faites pour améliorer le code, comme des paramètres LunarCRUSH supplémentaires pour tweeter des données de crypto-monnaie robustes ou des tweets visuellement attrayants avec des images et des hashtags.

Veuillez me faire savoir dans les commentaires si vous avez des questions ou des suggestions.





Traduction de l’article de Nicholas Resendez : Article Original

BlockBlog

Le Meilleur de l'Actualité Blockchain Francophone & Internationale | News, Guides, Avis & Tutoriels pour s'informer et démarrer facilement avec Bitcoin, les Crypto-Monnaies et le Blockchain. En Savoir Plus sur L'Équipe BlockBlog

Commenter cet Article

Commenter cet Article

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Plus dans News

Top
massa eget commodo venenatis, Praesent lectus id, quis id facilisis ut