Laden...
|
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 : Tout part d’une idéeChallenge accepté Attention Elon, on arrive !!! Elon Musk présentant DogeCoin au mondeListons ce dont nous avons besoin : un moyen de lire des tweetsquelques lignes de code pour analyser si les tweets sont intéressants de notre point de vueun moyen d’être notifié avec le contenu du messageAlors 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-botNous 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 notificationPour envoyer un message via Télégram, nous allons utiliser la librairie python-telegram-bot. Vous devez d’abord créer un bot grâce à @BotFather pour obtenir un token. 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 CHAT_ID, il suffit de discuter avec le bot @userinfobot : @userinfobotIl 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. 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 Ça marcheIl 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.pyVous pourrez aussi trouver dans le repository Github une version multi utilisateurs. L’idée est d’enregistrer chaque utilisateur qui envoie /start au bot pour ensuite lui envoyer un message lors d’une détection de tweet intéressant. 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 : Ajouter plus d’informations dans le message envoyé par Télégram (comme le lien du tweet)Améliorer la détection de tweets intéressants en utilisant une librairie de Natural Language Processing pour obtenir un sentiment lié au texteStocker les IDs des tweets et des utilisateurs connectés au Bot dans une base de données (SQLite par exemple)Ajouter quelques commandes au bot comme « Donne moi les 10 derniers tweets intéressants. » |
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 |
Laden...
Laden...