|
Développer un bot en Python qui surveille les tweets d’Elon Musk Posted: 07 Feb 2021 10:49 AM PST Elon Musk, patron de Tesla, SpaceX et de The Boring Company est une célébrité de notre monde. Que l’on aime ou pas, il a une influence énorme sur les 45 millions d’abonnés qui le suivent sur Twitter. Depuis quelques mois, un simple tweet évoquant une action ou une crypto-monnaie fait s’emballer les foules, et les valeurs de ces éléments. Mon frère observant cela, m’envoie alors un message : Challenge accepté Attention Elon, on arrive !!! Listons ce dont nous avons besoin :
Alors oui, la mode est au No Code et il aurait été beaucoup plus simple de mettre en place ça avec IFTTT ou Zapier mais aussi beaucoup moins intéressant Le premier langage qui me vient à l’esprit pour développer cet outil est Python. Simple, avec suffisamment de librairies disponibles et plutôt orienté script. Pour lire les tweets, la librairie Tweepy me semble simple et efficace. L’idée est de pouvoir récupérer tous les tweets du compte Twitter d’Elon. Pour être notifié, nous pourrions envoyer un mail mais la complexité des serveurs SMTP et de la gestion des DNS me rebute toujours. Je décide donc de partir sur de la messagerie instantanée avec Telegram qui permet de créer facilement des bots. Pour suivre ce tutoriel, vous devez avoir un environnement de développement Python (python3 pour moi), un compte développeur Twitter et un compte Telegram. Démarrez en installant les librairies nécessaires à notre projet : pip3 install tweepy python-telegram-bot Nous commençons par récupérer les tweets du compte d’Elon Musk : import tweepy auth = tweepy.OAuthHandler(API_KEY, API_SECRET) auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET) api = tweepy.API(auth) tweets = api.user_timeline(screen_name='elonmusk', count=100, include_rts = False, tweet_mode = 'extended') Une boucle pour itérer sur la liste de tweets et les afficher : for tweet in tweets: print("ID: {}".format(tweet.id)) print(tweet.created_at) print(tweet.full_text) print("\n") Passons maintenant à l’analyse des tweets pour savoir s’il est pertinent d’être notifié suivant son contenu. Nous partons sur quelque chose de simple que nous pourrons améliorer plus tard : tous les messages contenant le mot « crypto » ou le signe « $ » (souvent utilisé pour désigner une crypto-monnaie comme $BTC) : # Dans la boucle for if "crypto" in tweet.full_text or "$" in tweet.full_text: # Send the notification Pour envoyer un message via Télégram, nous allons utiliser la librairie C’est assez simple à faire en passant par l’assistant https://telegram.me/BotFather Nous initialisations le bot et envoyons un message à un utilisateur précis (moi) : import telegram bot = telegram.Bot(token='TOKEN') MY_CHAT_ID = "09182098092804983092832" # Dans la boucle for, après le if bot.send_message(chat_id = MY_CHAT_ID, text = "Elon Musk a tweeté : " + tweet.full_text) Pour obtenir votre Il nous reste un petit souci. Lorsque notre script va tourner de manière récurrente, si un tweet parmi les 100 derniers est intéressant, nous allons être notifié à chaque fois. f = open("tweet_ids", "r") tweets_already_notified = f.read().splitlines() f.close() # Dans la boucle for, après le if if str(tweet.id) not in tweets_already_notified: # Notify and store tweet ID in file f.write(str(tweet.id)+ '\n') Le script final ressemble donc à ça : import tweepy import telegram import credentials # Twitter API Auth auth = tweepy.OAuthHandler(credentials.API_KEY, credentials.API_SECRET) auth.set_access_token(credentials.ACCESS_TOKEN, credentials.ACCESS_TOKEN_SECRET) api = tweepy.API(auth) # Telegram Bot Auth bot = telegram.Bot(token=credentials.BOT_TOKEN) # Function to test if tweet is "interesting" def is_tweet_interesting(tweet_text): return "crypto" in tweet_text or "$" in tweet_text # Fetch last 100 tweets tweets = api.user_timeline(screen_name='elonmusk', count=100, include_rts = False, tweet_mode = 'extended') # Read already notified tweets f = open("tweet_ids", "r") tweets_already_notified = f.read().splitlines() f.close() f = open("tweet_ids", "a") for tweet in tweets: # If tweet already notified if str(tweet.id) not in tweets_already_notified: if is_tweet_interesting(tweet.full_text): # Notify Telegram user bot.send_message(chat_id = credentials.MY_CHAT_ID, text = "Elon Musk a tweeté : " + tweet.full_text) print("ID: {} notified".format(tweet.id)) # Store Tweet ID in file to notify only once f.write(str(tweet.id)+ '\n') f.close() Le code est disponible sous Github ici : https://github.com/cicoub13/elon-coin Il ne reste plus qu’à lancer ce script toutes les X minutes (fréquence à votre discrétion) avec un cron : */5 * * * * python3 ~/workspace/elon-coin/bot_one_user/bot_one_user.py Vous pourrez aussi trouver dans le repository Github une version multi utilisateurs. L’idée est d’enregistrer chaque utilisateur qui envoie Et bien sûr le Bot est disponible ici : https://telegram.me/eloin_coin_bot Liste des choses à améliorer si vous voulez explorer cette idée :
|
You are subscribed to email updates from Fotozik. To stop receiving these emails, you may unsubscribe now. | Email delivery powered by Google |
Google, 1600 Amphitheatre Parkway, Mountain View, CA 94043, United States |