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.
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.
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.