FRFAM.COM >> Famille >> Technologie &Innovation >> Informatique

Créez des bots Twitter, Instagram et Reddit avec Python : Guide complet et étape par étape

En 2019, les bots étaient déjà omniprésents sur les réseaux sociaux. Des bots de discussion aux scrapers web, ils automatisent de nombreuses tâches. Avez-vous déjà créé le vôtre ? C'est plus simple que vous ne le pensez. Rejoignez la révolution des bots avec Python, un langage accessible et puissant.

Dans ce tutoriel expert, découvrez comment automatiser vos comptes Twitter, Reddit et Instagram grâce à Python. Avertissement : Respectez toujours les conditions d'utilisation des plateformes. Les APIs évoluent ; vérifiez leur actualité pour éviter les suspensions de compte.

Travailler avec Python

Python est idéal pour les débutants et experts grâce à sa simplicité. Téléchargez-le sur python.org pour votre OS. Utilisez votre éditeur préféré (VS Code, PyCharm).

Les distributions incluent pip, gestionnaire de paquets avec plus de 168 000 bibliothèques (en 2019). Installez les nôtres :

pip install --upgrade InstagramAPI
tweepy
praw

Importez-les ensuite dans vos scripts.

Obtenir les clés API et secrets

Les bots nécessitent un accès API sécurisé. Stockez tout dans credentials.py :

# credentials.py
twitter_consumer_key = ''
twitter_consumer_secret = ''
twitter_access_token = ''
twitter_access_token_secret = ''
reddit_client_id = ''
reddit_client_secret = ''
reddit_user_agent = ''
instagram_client_id = ''
instagram_client_secret = ''

Important : N'ajoutez jamais ce fichier à Git ou tout dépôt public. Utilisez .gitignore.

Configuration Twitter (désormais X)

Créez une app sur developer.twitter.com. Copiez Consumer Key/Secret, Access Token/Secret dans credentials.py. Twitter vérifie les comptes pour éviter le spam.

Configuration Reddit

Connectez-vous à Reddit, allez dans Préférences > Applications > Créer une app (type : script). Notez Client ID et Secret.

Créez des bots Twitter, Instagram et Reddit avec Python : Guide complet et étape par étapeCréez des bots Twitter, Instagram et Reddit avec Python : Guide complet et étape par étape

Configuration Instagram

InstagramAPI est non-officielle ; créez un compte dédié avec nom/mot de passe. Risque : Utilisez avec prudence, APIs privées évoluent.

Accéder à Reddit avec PRAW

Initialisez puis explorez :

import praw
from credentials import *

my_reddit = praw.Reddit(client_id=reddit_client_id,
                        client_secret=reddit_client_secret,
                        user_agent=reddit_user_agent)

sub_name = 'technologie'
max_posts = 10
for submission in my_reddit.subreddit(sub_name).new(limit=max_posts):
    print(submission.title)

Utilisez hot(), top() etc. pour d'autres flux.

Rechercher hashtags Instagram avec InstagramAPI

from InstagramAPI import InstagramAPI
from credentials import instagram_client_id, instagram_client_secret

my_insta_api = InstagramAPI(instagram_client_id, instagram_client_secret)
my_insta_api.login()

Exemple pour hashtags :

hashtag = 'technologie'
get_hashtag = my_insta_api.getHashtagFeed(hashtag)
if get_hashtag:
    for item in my_insta_api.LastJson['items']:
        if 'caption' in item and 'text' in item['caption']:
            caption = item['caption']['text']
            print(caption)

Ajouter des images

Fonction pour extraire images (fonctions helpers incluses) :

import requests

def get_largest_image(candidates):
    candidate = {}
    pixels = 0
    for cand in candidates:
        res = cand['height'] * cand['width']
        if res > pixels:
            pixels = res
            candidate = cand
    return candidate

def save_image_from_candidate(url):
    filename = ''
    response = requests.get(url)
    if response.status_code == 200:
        filename = url.split('/')[-1].split('?')[0]
        with open(filename, 'wb') as f:
            f.write(response.content)
    return filename

def get_images_from_hashtag(hashtag, num_images):
    images = []
    get_hashtag = my_insta_api.getHashtagFeed(hashtag)
    if get_hashtag == False:
        return images
    for item in my_insta_api.LastJson['items']:
        if item['media_type'] == 1 and 'image_versions2' in item:
            candidate = get_largest_image(item['image_versions2']['candidates'])
            filename = save_image_from_candidate(candidate['url'])
            if filename != '':
                caption = item['caption']['text'] if 'caption' in item and 'text' in item['caption'] else ''
                images.append((filename, caption))
                if len(images) >= num_images:
                    break
    return images

Tweeter avec Tweepy

import tweepy
from credentials import *

tw_auth = tweepy.OAuthHandler(twitter_consumer_key, twitter_consumer_secret)
tw_auth.set_access_token(twitter_access_token, twitter_access_token_secret)
tw_api = tweepy.API(tw_auth)

Bot retweet simple :

import time
for tweet in tweepy.Cursor(tw_api.search, q='Python').items(10):
    try:
        tweet.favorite()
        tweet.retweet()
        time.sleep(2)
    except tweepy.TweepError as e:
        print(e.reason)
    except StopIteration:
        break

Intégrez Instagram/Reddit pour tweeter :

hashtag = 'technologie'
num_posts = 5

# Reddit to Twitter
reddit_posts = my_reddit.subreddit(hashtag).new(limit=num_posts)
for submission in reddit_posts:
    title = submission.title
    url = f'https://www.reddit.com{submission.permalink}'
    tweet_str = f"Reddit r/{hashtag} : {title} {url}"
    tw_api.update_status(tweet_str)

# Instagram to Twitter
media_info = get_images_from_hashtag(hashtag, num_posts)
for (filename, caption) in media_info:
    try:
        tw_api.update_with_media(filename, status=caption[:280])
    except tweepy.TweepError as e:
        print(e.reason)

Votre bot Python est prêt !

Automatisez en boucle sur un serveur, Raspberry Pi ou cron. Explorez plus : bots éthiques, monitoring. Partagez vos créations !

[]