Accueil

Comment créer des robots Twitter, Instagram et Reddit en utilisant Python

Added 2019-02-19


Nous sommes en 2019. Vous avez entendu parler de bots. Il y a des robots de discussion, des robots de courrier électronique, des robots de raclage Web et des robots de médias sociaux. Avez-vous créé un bot? C’est étonnamment facile. Probablement pourquoi ils sont partout. Embrasser nos seigneurs bot en rejoignant leur rang.

Dans cet article, je vais vous montrer comment utiliser Python pour interagir automatiquement avec vos comptes Twitter, Reddit et Instagram.

Travailler avec Python

Les distributions Python sont associées à l'utilitaire appelé pépin . Au moment de la rédaction de ce manuel, plus de 168 000 bibliothèques peuvent être téléchargées à l'aide de pépin . Pour les robots que vous allez créer aujourd'hui, il n'en faut que trois.

À partir de la ligne de commande, vous pouvez installer les bibliothèques nécessaires à l’aide de ces trois lignes.


pip installer --upgrade InstagramAPI
pip install --upgrade tweepy pip install

Vous pourrez maintenant importer ces bibliothèques si nécessaire.

Obtenir des clés et des secrets d'application

Un philosophe avisé a un jour déclaré: «Les secrets ne sont pas amusants. Les secrets, les secrets font du mal à quelqu'un. »Respectueusement, les robots ont besoin de secrets. La prochaine étape de la configuration de vos robots consiste à leur permettre d'accéder à l'API de chaque site. Pour ce faire, vous aurez besoin d’une clé d’application ou d’un secret.

Lorsque vous collectez des clés, des secrets, des jetons, etc. (cela ressemble à un jeu amusant!), Mettez-les tous dans un seul fichier appelé "credentials.py". Ce fichier ressemblerait à ceci:


# clés

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 = ''

Suggestion de confidentialité très importante: ne commettez dans ce fichier aucun contrôle de source (par exemple Git). Vous ne voulez pas que quelqu'un d'autre ait ces clés et ces secrets. Ils sont appelés secrets pour une raison.

Configuration de l'accès Twitter

Après avoir suivi ces étapes, copiez la clé de consommateur, le secret de consommateur, le jeton d'accès et le secret de jeton d'accès dans votre fichier credentials.py.

Configuration de l'accès Reddit

Obtenir votre identifiant client et votre secret Reddit est très similaire à Twitter. Vous devrez enregistrer une application en tant qu'agent utilisateur Reddit. Après cela, vous devez absolument mettre «Reddit User Agent» sur votre CV.

se connecter  sur le compte Reddit de votre choix. Accédez au page de préférences des applications  et Cliquez sur créer une autre application . Nommez votre agent utilisateur quelque chose d'utile. Sélectionnez le script  dans le but de votre application. L'URL à propos peut être laissé vide. Remplissez n'importe quelle adresse pour la boîte de redirection.

Reddit App Bot Python

Après vous Appuyez sur Créer une application. , l’écran suivant vous sera présenté avec une liste de vos applications. Les chiffres sous le nom de votre application représentent l'ID client et le secret client se situe en dessous. Copiez ces valeurs dans votre fichier credentials.py.

Python secret de l'API de l'application Reddit

Configuration de l'accès à Instagram

L'accès à Instagram diffère de Twitter et Reddit. Au lieu d'enregistrer une application, vous utilisez votre nom d'utilisateur et votre mot de passe. Je suggère de créer un compte public séparé et d'utiliser ces détails pour votre bot.

Accéder à Reddit avec Praw

L'utilisation de praw est un processus en deux étapes. Premièrement, la configuration de l'accès consiste en un appel de fonction unique à la méthode Reddit de Praw. Ensuite, à l'aide de l'objet initialisé, la recherche d'un sous-répertoire est effectuée à l'aide de la méthode new ().


poire d'importation
de l'importation des informations d'identification *

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

nom_sous = 'technologie'
max_posts = 10

pour la soumission dans my_reddit.subreddit (sub_name) .new (limit = max_posts):
print (submission.title)

Changer la nom_sous  variable pour obtenir des messages de différents subreddits. Au lieu de Nouveau() , d'autres méthodes telles que chaud()  sont disponibles pour obtenir des messages.

Recherche de hashtags Instagram via InstagramAPI

La première étape de l’utilisation de l’API Instagram consiste à configurer un objet avec l’ID client et le secret. Juste après cela, appelez la méthode login () pour terminer la configuration.


depuis InstagramAPI import InstagramAPI
depuis les informations d'identification import instagram_client_id, instagram_client_secret

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

L'utilisation de l'API est un peu plus compliquée que son homologue Reddit. Dans cet exemple, le script utilise getHashtagFeed pour obtenir un très grand objet de réponse JSON à partir d'Instagram.

En effectuant une recherche dans la réponse, le script recherche le texte de la légende, puis s’imprime à l’écran pour le visualiser.


get_hashtag = my_insta_api.getHashtagFeed (hashtag)

si get_hashtag! = False:
 pour item dans my_insta_api.LastJson ['items']:
 si 'légende' dans item.keys () et 'texte' dans item ['légende']. keys ():
 caption = item ['caption'] ['text']
 imprimer (légende)

Ajouter des images aux médias sociaux

À l'avenir, vous voudrez peut-être que votre script récupère les images dans ce flux de hashtag. Pour ce faire, parcourez la réponse JSON et recherchez le support associé à chaque publication. Voici une implémentation pour extraire les informations de la réponse JSON:


def get_images_from_hashtag (hashtag, num_images):
images = []
get_hashtag = my_insta_api.getHashtagFeed (hashtag)

si get_hashtag == False:
renvoyer des images

pour item dans my_insta_api.LastJson ['items']:
si item ['media_type'] == 1 et 'image_versions2' dans item.keys ():
candidat = get_largest_image (item ['image_versions2'] ['candidats']])
# obtenir une image
filename = self.save_image_from_candidate (candidat ['url'])
si nomfichier! = '':
# obtenir le statut, enregistrer sous forme de tuple
caption = get_caption (item)
images.append ((nom du fichier, légende))
si len (images)>
= num_images:
Pause
 renvoyer des images

Deux fonctions d’aide sont utilisées dans cette fonction. Instagram envoie une liste de “candidats” aux images dans la réponse JSON. Choisissez la plus grande de ces images afin que le support soit affiché dans sa résolution la plus élevée.


def get_largest_image (candidats):
candidat = {}
pixels = 0
pour candid in:
# choisissez le plus haute résolution
res = cand ['hauteur'] * cand ['largeur']
si res>
 pixels:
pixels = res
candidat = cand
candidat de retour

Deuxièmement, une fois que le lien vers l'image est trouvé, vous pouvez enregistrer l'image localement en écrivant le contenu dans un fichier. En utilisant le demandes  bibliothèque rend cela simple.


def save_image_from_candidate (url):
 filename = ''
 response = requests.get (url)
 # vérifier le code d'état de la réponse, 200 signifie bonne
 si response.status_code == 200:
 filename = url.split ("/") [- 1] .split ('?') [0]
 avec open (nom de fichier, 'wb') comme f:
 f.write (response.content)
 retourne le nom du fichier

Tweeter les médias avec Tweepy

Tout d’abord, vous devrez configurer un accès Twitter en utilisant vos secrets et vos clés.


importer tweepy
de l'importation des informations d'identification *

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)

La création d'un bot retweet générique se fait en quelques lignes seulement.


pour tweet dans tweepy.Cursor (tw_api.search, q = '
<28>
') .items (10):
essayer:
tweet.favorite ()
tweet.retweet ()
temps.sommeil (2)
sauf tweepy.TweepError as e:
print (e.reason)
sauf StopIteration:
Pause

Beaucoup d'autres choses peuvent être faites avec cette bibliothèque. Pour conclure cette visite, vous pouvez utiliser le get_images_from_hashtag  fonction du bot Instagram précédemment créé pour tweeter des images et des légendes.

De plus, votre bot Twitter peut rechercher de nouveaux messages dans Reddit et les envoyer sur Twitter. Pour associer ces deux fonctionnalités, procédez comme suit:


# utiliser r /

 pour la recherche reddit
# et #

 pour la recherche sur Instagram
hashtag = 'technologie'
num_posts = 5

# tweet reddit info
reddit_posts = my_reddit.subreddit (hashtag) .new (limit = num_posts)
pour la soumission dans reddit_posts:
titre = soumission.title
url = 'www.reddit.com {}'. format (submission.permalink)
tweet_str = f'Reddit r / {sous} mise à jour: \ n \ n {titre} # {sous} {url} '
tweet_str = trim_to_280 (tweet_str)
tw_api.update (tweet_str)

# tweet instagram media
media_info = get_images_from_hashtag (hashtag, num_posts)
pour (nom du fichier, message) dans media_info:
essayer:
tweet_str = trim_to_280 (message)
tw_api.update_with_media (nom du fichier, status = tweet_str)
sauf tweepy.TweepError as e:
print (e.reason)
sauf StopIteration:
Pause

Votre bot de médias sociaux propulsé par Python est prêt!

Ainsi, vous avez maintenant un tas de code qui extrait les médias d’un site et les publie sur un autre. Vous pouvez aussi mélanger et assortir. Tirez les tweets et postez sur Reddit. Recueillir des images Instagram pour poster à des subreddits. Faites un bot et faites partie du vrai Internet.






Nuage de tags

Choix de L'éditeur


Thomas Becket

Je suis un écrivain indépendant qui couvre la programmation et les logiciels.
Je suis étudiant en informatique et je m'intéresse à la programmation, aux logiciels et à la technologie
Gadgets technologiques et critiques 2019