Piloter Twitter via Python

C’est fou tout ce qu’on peut faire avec Twitter quand on est développeur ! Voici quelques exemples:

  • retweeter automatique les tweets de vos amis contenant un mot clé
  • lister tous les tweets envoyés depuis telle ville pour surveiller un mot clé
  • stocker toutes les coordonnées et infos de vos contacts
  • Suivre automatiquement vos followers
  • Créer un bot qui répond à un certain nombre de questions
  • Créer un service relié à votre raspberry PI que vous controler en envoyer des tweets…

Bref, l’API est bien fournie et il y a de quoi s’amuser. On fait un petit essai ? Bon, on va déjà choisir notre librairie en fonction de celles proposées par Twitter. Comme j’aime beaucoup Python, on va travailler avec Tweepy.

Installation et mise en place

  1. Pour l’installation, je vous conseille de passer par pip, c’est beaucoup plus simple. Si vous ne l’avez pas, installez-le!   Ensuite, il suffira d’un simple “pip install tweepy” pour que la librairie s’installe automatiquement (pip3 pour travailler avec python 3, c’est mon cas).
  2. Rendez-vous à cette adresse: https://apps.twitter.com/ et cliquez sur “Create A New App”. Remplissez les champs dotés d’une petite étoile (champs obligatoires) – peu importe ce que vous allez indiquer, on veut juste une autorisation d’utiliser l’application que l’on va développer. Pour ma part, j’ai indiqué “Name:BenicourtTest”, “Description:This is a little application test to learn Twitter API” et “Website:https://www.createursdemondes.fr/”, puis j’ai coché “Yes, I have blablabla…” et enfin “Create Your Twitter Application”.
  3. Grâce à cela, vous allez avoir accès au paramétrage. Allez dans “Keys and Access Tokens” et cliquez sur “Create Access Token”. Vous allez obtenir quelque chose comme:

Capture d'écran 2017-02-27 17.19.06

Voilà, j’ai juste caché les identifiants, mais vous aurez les vôtres, donc pas de soucis.

Premier test: sendtweet.py

On va commencer par un petit test simple qui consiste à envoyer un tweet via le script.

import tweepy
consumer_key = "blablabla"
consumer_secret = "blablabla"
access_token = "blablabla"
access_token_secret = "blablabla"
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
api.update_status(status="This is a tweet sent automatically by a python script! (don't worry friends, i'm just testing my code.)")

Bien entendu, à la place de “blablabla” vous indiquez les bonnes valeurs obtenues précédemment 😉

Et miracle apès avoir lancé le script:

Capture d'écran 2017-02-27 17.37.49

Second Test: getmydatas.py

Cette fois-ci, on va récupérer des données sur notre profil.

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
user = api.me()
print ("User id: " + user.id_str)
print (user.name)
print ("Description: " + user.description)
print ("Language: " + user.lang)
print ("Account created at: " + str(user.created_at))
print ("Location: " + user.location)
print ("Time zone: " + user.time_zone)
print ("Number of tweets: " + str(user.statuses_count))
print ("Number of followers: " + str(user.followers_count))
print ("Following: " + str(user.friends_count))
print ("A member of " + str(user.listed_count) + " lists.")

Voilà ce que cela donne:
VirtualBox_Linux_27_02_2017_17_44_11.png

Troisième Test: Réccupérer les n derniers tweets d’un utilisateur

Tout d’abord, on a besoin de son ID. Le plus simple est de passer par cette page qui va transformer un nom d’utilisateur en ID. Pour mon test, j’ai pris mon ami ““. Son ID retourné est 629218592.

Voici le script:

api = tweepy.API(auth)
statuses = api.user_timeline(id = 629218592, count = 3)
for status in statuses:
    print ("***")
    print ("Tweet id: " + status.id_str)
    print (status.text)
    print ("Retweet count: " + str(status.retweet_count))
    print ("Favorite count: " + str(status.favorite_count))
    print (status.created_at)
    print ("Status place: " + str(status.place))
    print ("Source: " + status.source)
    print ("Coordinates: " + str(status.coordinates))

Cela donne:
VirtualBox_Linux_27_02_2017_17_47_08.png
J’ai pris juste les 3 derniers (count = 3).

Quatrième Test: Tracker un mot clé sur l’ensemble des flux en temps réel

Ici, on va juste surveiller un mot clé et afficher le flux correspondant (sans filter toutes les balises, du brut à retravailler):

class StdOutListener(StreamListener):
    def on_data(self, data):
        print(data)
        return True
    def on_error(self, status):
        print(status)
if __name__ == '__main__':
    l = StdOutListener()
    auth = OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_token, access_token_secret)
    stream = Stream(auth, l)
    stream.filter(track=['ue4'])

Le mot clé utilisé ici est “ue4” pour Unreal Engine 4.
Voici un exemple de sortie:

{"created_at":"Mon Feb 27 17:02:45 +0000 2017","id":836260294531887104,"id_str":"836260294531887104","text":"RT @AnalyticMike: #indiedev #gamedev Climbing to the top of the world @PlanetrismGame Amazing scenery in #VirtualReality #UE4\u2026 ","source":"\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":479403505,"id_str":"479403505","name":"Pekka Vihtala","screen_name":"PekkaVihtala","location":null,"url":null,"description":"Investor and Videogame Producer, #videogames #gamedev ...

Bon, c’est beaucoup plus long, car il y a beaucoup d’éléments, mais python permet de manipuler chaque sous-élément comme un objet. Bon, je ne m’étale pas là-dessus, c’est juste un exemple.

Cinquième Test: Lister tous les tweets qui proviennent d’une ville ou d’un pays

Voici le code:

"""
granularity = country, city,neighborhood
"""
places = api.geo_search(query="Toulouse", granularity="neighborhood")
place_id = places[0].id
tweets = api.search(q="place:%s" % place_id, count=100)
for tweet in tweets:
    print (tweet.text + " | " + tweet.place.name if tweet.place else "Undefined place")

Ici, j’ai utilisé “neighborhood” pour voisinage (i.e. “autour de”), mais j’aurais pu indiquer “city” pour indiquer la ville précisément ou le pays.

Voici ce que cela donne (un extrait):

VirtualBox_Linux_27_02_2017_18_10_14.png

Conclusion

Bon, vous avez vu, c’est relativement simple à manipuler. Vous avez envie d’aller plus loin ? Je vous conseille déjà de potasser la documentation. Pour ma part, je me ferai bien un petit bot d’ici quelques semaines… un truc pour optimiser ma veille techno ou pour communiquer plus facilement à partir de celle-ci – je ne suis pas encore décidé. N’héistez pas à m’envoyer vos suggestions !

Ces articles pourraient aussi vous intéresser …