Piloter Twitter via Python

C’est fou tout ce qu’on peut faire avec Twit­ter quand on est développeur ! Voici quelques exem­ples:

  • retweet­er automa­tique les tweets de vos amis con­tenant un mot clé
  • lis­ter tous les tweets envoyés depuis telle ville pour sur­veiller un mot clé
  • stock­er toutes les coor­don­nées et infos de vos con­tacts
  • Suiv­re automa­tique­ment vos fol­low­ers
  • Créer un bot qui répond à un cer­tain nom­bre de ques­tions
  • Créer un ser­vice relié à votre rasp­ber­ry PI que vous con­trol­er en envoy­er 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 fonc­tion de celles pro­posées par Twit­ter. Comme j’aime beau­coup Python, on va tra­vailler avec Tweepy.

Installation et mise en place

  1. Pour l’installation, je vous con­seille de pass­er par pip, c’est beau­coup plus sim­ple. Si vous ne l’avez pas, installez-le!   Ensuite, il suf­fi­ra d’un sim­ple “pip install tweepy” pour que la librairie s’installe automa­tique­ment (pip3 pour tra­vailler avec python 3, c’est mon cas).
  2. Ren­dez-vous à cette adresse: https://apps.twitter.com/ et cliquez sur “Cre­ate A New App”. Rem­plis­sez les champs dotés d’une petite étoile (champs oblig­a­toires) — peu importe ce que vous allez indi­quer, on veut juste une autori­sa­tion d’utiliser l’application que l’on va dévelop­per. Pour ma part, j’ai indiqué “Name:BenicourtTest”, “Description:This is a lit­tle appli­ca­tion test to learn Twit­ter API” et “Website:http://www.benicourt.com/blender/”, puis j’ai coché “Yes, I have blablabla…” et enfin “Cre­ate Your Twit­ter Appli­ca­tion”.
  3. Grâce à cela, vous allez avoir accès au paramé­trage. Allez dans “Keys and Access Tokens” et cliquez sur “Cre­ate Access Token”. Vous allez obtenir quelque chose comme:

Capture d'écran 2017-02-27 17.19.06

Voilà, j’ai juste caché les iden­ti­fi­ants, mais vous aurez les vôtres, donc pas de soucis.

Premier test: sendtweet.py

On va com­mencer par un petit test sim­ple qui con­siste à envoy­er 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 enten­du, à la place de “blablabla” vous indiquez les bonnes valeurs obtenues précédem­ment 😉

Et mir­a­cle 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ér­er des don­nées sur notre pro­fil.

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 sim­ple est de pass­er par cette page qui va trans­former 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 sur­veiller un mot clé et affich­er le flux cor­re­spon­dant (sans fil­ter toutes les balis­es, du brut à retra­vailler):

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é util­isé ici est “ue4” pour Unre­al Engine 4.

Voici un exem­ple de sor­tie:

{"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 beau­coup plus long, car il y a beau­coup d’éléments, mais python per­met de manip­uler chaque sous-élé­ment comme un objet. Bon, je ne m’étale pas là-dessus, c’est juste un exem­ple.

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 util­isé “neigh­bor­hood” pour voisi­nage (i.e. “autour de”), mais j’aurais pu indi­quer “city” pour indi­quer 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 rel­a­tive­ment sim­ple à manip­uler. Vous avez envie d’aller plus loin ? Je vous con­seille déjà de potass­er la doc­u­men­ta­tion. Pour ma part, je me ferai bien un petit bot d’ici quelques semaines… un truc pour opti­miser ma veille tech­no ou pour com­mu­ni­quer plus facile­ment à par­tir de celle-ci — je ne suis pas encore décidé. N’héistez pas à m’envoyer vos sug­ges­tions !

2 réflexions sur « Piloter Twitter via Python »

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.