Créer un Bot Twitter avec Python et AWS Lambda

Article publié le et mis à jour le .

Creer un Bot Twitter avec Python et AWS Lambda

Récemment j’ai voulu créer un bot Twitter qui tweet du contenu une fois par jour à une heure fixe. Heureusement, l’API Twitter est très bien faite et Twitter accepte l’utilisation de bots. Après avoir fait comparatif rapide des meilleures technologies disponibles, j’ai décidé d’opter pour Python et AWS Lambda pour mon bot tant pour la performance que pour la gratuité.

Comment créer un bot twitter qui tweet ?

Pour créer un Bot Twitter vous devrez interagir avec l’API de Twitter ou à l’aide d’une libraire pour le langage de programmation que vous utilisez comme par exemple Tweepy en Python. Votre devrez ensuite utiliser un service comme Amazon Lambda ou Heroku pour héberger votre bot.

Mon idée de bot consistait à publier des traductions de certains des meilleurs tweets de Naval Ravikant. Naval Ravikant est un entrepreneur Americano-Indien, fondateur de AngelList et investisseur dans beaucoup de gros succès américains (Twitter, Uber, FourSquare, StackOverflow, …).

Vous pouvez d’ailleurs voir ce que donne le bot sur @NavalBotFR.

💡 Si vous lisez ce blog régulièrement, vous savez que j’adore automatiser des choses avec des bots (comme des bots discords) et utiliser Amazon Web Services tant pour mes app avec AWS Amplify que pour faire tourner mes bots comme celui dont je vais vous paler aujourd’hui.

Commençons sans plus tarder ce tutoriel : Comment créer un bot Twitter ?

Comment créer un compte Twitter pour votre Bot ?

Comment créer un compte Twitter pour votre Bot

Un Bot Twitter interagit avec un compte Twitter donné, avant de développer un bot Twitter, il faut donc d’abord avoir un compte Twitter. Pour créer un compte Twitter, rendez-vous sur le site de Twitter, suivez les étapes et validez votre compte par mail et/ou SMS.

Comment obtenir un compte Twitter Developer ?

Comment obtenir un compte Twitter Developer

Pour créer un compte Twitter Developer, rendez-vous sur le portail développeurs de Twitter. Vous devrez expliquer en quoi consiste votre Bot Twitter, comment il va interagir avec leur API et lier votre compte Twitter Developer à un compte Twitter validé par email.

Une fois votre compte validé automatiquement, vous aurez accès au Dashboard du Developer Portal. Normalement vous devriez déjà avoir un projet de créé dans “Projects & Apps” avec le scope définit par ce que vous avez rempli dans le formulaire de validation.

Si ce n’est pas le cas, créez-en un comme votre projet donnera accès au bot à Twitter.

Comment récupérer vos clés API Twitter ?

Comment récupérer vos clés API Twitter

Une fois votre Projet Twitter crée sur le Portail des Développeurs Twitter, appuyez sur l’icône de Clé dans le dashboard. Vous pourrez y trouver votre clé d’api et sa secret key mais aussi votre Token d’accès et son token secret.

C’est tout ce dont vous aurez besoin pour que votre Bot Python puisse intéragir avec l’API Twitter.

Quelle libraire Python pour développer un Bot Twitter ?

Quelle libraire Python pour développer un Bot Twitter

Pour développer un Bot Twitter en Python, la libraire Tweepy s’est imposée comme la libraire de référence. Tweepy est un projet open-source très facile d’utilisation pour accèder à l’API de Twitter. Sa documentation est complète et très bien faite.

Pour installer Tweepy, tapez :

pip install tweepy

Une fois Tweepy installée, on va s’inspirer d’un des Codes Snippets fourni dans la doc comme base de notre bot.

import tweepy

API_KEY = "******************"
API_SECRET = "******************"

ACCESS_TOKEN = "******************"
ACCESS_TOKEN_SECRET = "******************"

auth = tweepy.OAuthHandler(API_KEY, API_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)

api = tweepy.API(auth)

Et voilà, on a la base de notre bot Twitter ! Mais pour le moment ce bot ne fait rien à part se connecter.

Pour Tweeter, il faut appeler la méthode update_status de notre API :

api.update_status("Hello World!")

Dans mon cas, j’avais besoin de lire des Tweets depuis un fichier JSON et de Tweeter une chaîne de caractère au hasard. J’ai aussi passé mes clés API et secrets en variable d’environnement pour des questions de sécurité.

import json
from random import choice
from os import environ
import tweepy

API_KEY = environ['API_KEY']
API_SECRET_KEY = environ['API_SECRET_KEY']

ACCESS_TOKEN = environ['ACCESS_TOKEN']
ACCESS_TOKEN_SECRET = environ['ACCESS_TOKEN_SECRET']

auth = tweepy.OAuthHandler(API_KEY, API_SECRET_KEY)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
api = tweepy.API(auth)

with open('./tweets.json') as f:
    tweets = json.load(f)
    ## choice retourne un élément au hasard de la liste qu'on lui passe en paramètre
    tweet = '"' + choice(tweets) + '" - @naval'
    api.update_status(tweet)

Mon bot Twitter est terminé ! Maintenant, il faut le faire tourner dans le cloud et le lancer à heure régulière.

Comment créer un Bot Python sur AWS Lambda ?

Comment créer un Bot Python sur AWS Lambda

Pour que votre Bot vive sur le cloud, vous pouvez utiliser AWS Lambda. Rendez-vous sur la console AWS puis dans AWS Lambda. Là, créez une nouvelle fonction Python, donnez-lui un nom et choisissez la dernière version de Python pour son Runtime, appuyez sur Create Function pour valider.

Une fois dans votre Lambda, vous verrez un code de base avec une fonction appelée lambda_handler. Conservez-la comme c’est la fonction que Lambda utilisée quand celui-ci est executé.

On va donc y ajouter notre logique en créant une autre fonction pour la logique de votre bot et puis on va appeler cette fonction dans lambda_handler.

Par exemple, mon bot complet donne :

import json
from random import choice
from os import environ
import tweepy

API_KEY = environ['API_KEY']
API_SECRET_KEY = environ['API_SECRET_KEY']

ACCESS_TOKEN = environ['ACCESS_TOKEN']
ACCESS_TOKEN_SECRET = environ['ACCESS_TOKEN_SECRET']

def create_tweet():
    auth = tweepy.OAuthHandler(API_KEY, API_SECRET_KEY)
    auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
    api = tweepy.API(auth)

    with open('./tweets.json') as f:
      tweets = json.load(f)
      tweet = '"' + choice(tweets) + '" - @naval'
      api.update_status(tweet)
      return tweet



def lambda_handler(event, context):

    result = create_tweet()

    return {
        'statusCode': 200,
        'body': json.dumps(result)
    }

Si vous essayez d’executer ce lambda tel quel, ça ne va pas fonctionner pour 2 raisons.

La première erreur est liée au fait que Lambda ne connaît pas nos variables d’environnement : il suffit des les rajouter juste bas du bloc de code dans Environment variables. Appuyez sur Edit et ajoutez vos clés, tokens et secrets.

Le seconde problème est plus compliqué quand on n’est pas familier avec AWS Lambda : notre lambda ne connaît pas la libraire Tweepy. N’ayant pas accès à pip, comment l’installer ? Avec les Lambda Layers !

Découvrons ça ensemble instantanément.

Comment utiliser les Lambda Layers ?

Les AWS Lambda Layers permettent à vos Lambda d’interagir avec des ressources additionnelles comme des librairies, des AWS Lambda “Runtimes” personnalisés ou d’autres dépendances. Un layer est une archive ZIP qui contient les ressources dont vous avez besoin de votre Lambda.

Dans notre cas, on a besoin d’avoir accès à Tweepy. On va donc zipper ce package python et l’uploader entant que layer.

Pour zipper Tweepy, vous pouvez, depuis n’importe quel dossier ou environnement, installer Tweepy dans un dossier python avec la commande :

pip install tweepy -t python

Ensuite on va zipper le dossier, vous pouvez cliquez sur clic droit puis “Compresser “python"" si vous êtes sur Mac, ou bien tapper :

zip -r le_nom_de_mon_archive.zip python

Dans le menu de gauche sous Additional resources, vous trouverez Layers. Cliquez sur le bouton orange Create Layer puis :

  • fournissez un nom
  • uploadez l’archive zippée
  • et finalement n’oubliez pas de sélectionner le même Compatible Runtime que celui de votre Lambda !

Comment utiliser les Lambda Layers

Appuyez sur Create pour valider la création de votre Layer.

Votre layer est maintenant partagé et donc accessible pour tous vos Lambda qui ont le même runtime que celui spécifié. Pour lier le layer à notre fonction, on va retourner dans notre Lambda et puis cliquer sur Layers et sélectionner le notre.

Vous pouvez maintenant tester votre fonction avec le bouton Test et un message vert devrait apparaître !

On voudrait maintenant que le bot se trigger automatiquement à heure régulière et pour ça on va installer CloudWatch.

Comment fonctionne Amazon CloudWatch ?

CloudWatch est un Amazon Web Service qui permet de monitorer vos application et infrastructures AWS mais aussi d’agir en fonction de certains événements qui se produisent dans vos différents services. C’est un service utile autant pour les DevOps que pour les développeurs qui utilisent AWS.

Dans notre cas, on veut l’utiliser pour créer une règle qui va lancer notre bot à heure régulière. Le pic d’activité sur Twitter étant entre 11h et 15h, on va paramétrer deux tâches â ces heures là.

Comment fonctionne Amazon CloudWatch

Pour faire ça on va se rendre dans Events > Rules et puis Create rule. On va sélectionner Schedule et tapper une Cron Expression : 0 9,13 * * ? * (il y a deux heures de décalage horaire comme c’est en GMT). Puis on va lier notre Lambda avec Add target et on va sélectionner notre Lambda

Aller plus loin avec votre Bot sur AWS

Bravo ! Vous avez un Bot Twitter en Python fonctionnel qui tourne gratuitement sur AWS dans un Lambda et qui est lancé à heure fixe grâce à CloudWatch.

Vous pouvez bien sûr aller bien plus loin avec votre bot, vous pouvez par exemple :

  • le faire tweeter quand quelque chose se passe sur votre application (un utilisateur créé du contenu ?)
  • le faire tweeter quand un événement se passe sur un autre site (le Bitcoin passe un certain montant ?)
  • lire, analyser et récolter des données en fonction de ce qui se passe sur Twitter
  • et bien plus encore

D’ailleurs si vous voulez en apprendre plus sur AWS, j’ai écrit un article sur les Amazon Web Services essentiels à connaître si vous utilisez AWS et un autre autre si vous voulez aller plus loin en passant les certifications AWS.

L’automatisation n’a pas de limites et avec des services comme Heroku ou AWS la plupart de vos cas d’utilisation seront gratuits.

Alors créez le votre dès aujourd’hui !