Com es construeixen bots de Twitter, Instagram i Reddit mitjançant Python

Com es construeixen bots de Twitter, Instagram i Reddit mitjançant Python

És el 2019. Heu sentit a parlar de bots. Hi ha bots de xat, bots de correu electrònic, bots de rascat web i bots de xarxes socials. Ja heu creat un bot? És sorprenentment fàcil. Probablement per això estan per tot arreu. Abraça els nostres bot overlords unint-se al seu rang.





En aquest article, us mostraré com podeu aprofitar Python per interactuar automàticament amb els vostres comptes de Twitter, Reddit i Instagram.





Treballar amb Python

Aquest recorregut utilitza Python com a llenguatge escollit. Els avantatges de fer servir Python superen les deficiències de velocitat que tenen en comparació amb altres idiomes. Podeu descarregar Python per a gairebé qualsevol sistema operatiu. Ús l’editor que trieu .





Les distribucions Python s’associen a la utilitat anomenada

jocs que no utilitzen molt d'emmagatzematge
pip

. En el moment d’escriure, hi ha més de 168.000 biblioteques disponibles per descarregar-les



pip

. Per als robots que crearà avui, només són necessaris tres.

Des de la línia d'ordres, podeu instal·lar les biblioteques necessàries mitjançant aquestes tres línies.





pip install --upgrade InstagramAPI
pip install --upgrade tweepy pip install --upgrade praw

Ara podreu importar aquestes biblioteques on calgui.

Obtenció de claus i secrets d'aplicació

Un savi filòsof va dir una vegada: “Els secrets, els secrets no són divertits. Els secrets, els secrets fan mal a algú. Respectuosament, els robots necessiten secrets. El següent pas per configurar els robots és permetre'ls l'accés a l'API de cada lloc. Per fer-ho, necessitareu una clau d'aplicació o un secret.





A mesura que recopileu claus, secrets, fitxes i molt més (sona com un joc divertit!), Poseu-les totes en un únic fitxer anomenat 'credentials.py'. Aquest fitxer tindria un aspecte semblant a aquest:

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

Suggeriment de privadesa molt important: no confieu aquest fitxer a cap control de font (per exemple, Git). No voleu que ningú més tingui aquestes claus i secrets. S’anomenen secrets per una raó.

Configuració de l'accés a Twitter

Consulteu la nostra guia per configurar un bot de Twitter amb Node.js i us mostrarà com crear la vostra aplicació de Twitter. Tingueu en compte que Twitter trigarà una mica en verificar el vostre compte i assegurar-vos que no creeu un compte brossa.

Després de seguir aquests passos, copieu la clau del consumidor, el secret del consumidor, el testimoni d'accés i el secret del token d'accés al fitxer credentials.py.

Configuració de l'accés a Reddit

Obtenir l’identificació i el secret de client de Reddit és molt similar a Twitter. Haureu de registrar una aplicació com a agent d'usuari de Reddit. Després d’haver-ho fet, hauríeu de posar absolutament “Agent d’usuari de Reddit” al vostre currículum.

Inicieu la sessió al compte de Reddit que trieu. Aneu a pàgina de preferències d'aplicacions i Feu clic a crea una altra aplicació . Anomeneu al vostre agent d’usuari alguna cosa útil. Seleccioneu un script als efectes de la vostra aplicació. L'URL sobre es pot deixar en blanc. Empleneu qualsevol adreça per al quadre de redirecció.

Després de vostè Premeu crea aplicació , es mostrarà la següent pantalla amb una llista de les vostres aplicacions. Els dígits sota el nom de la vostra aplicació representen l'identificador de client i el secret del client es troba a sota. Copieu aquests valors al fitxer credentials.py.

Configuració de l'accés a Instagram

L’accés a Instagram és diferent de Twitter i Reddit. En lloc de registrar una aplicació, utilitzeu el vostre nom d'usuari i la vostra contrasenya. Us recomano crear un compte públic independent i utilitzar aquestes dades per al vostre bot.

Accedir a Reddit amb Praw

L’ús de praw és un procés en dos passos. En primer lloc, configurar l'accés és una trucada de funció única al mètode Reddit de praw. Després, mitjançant l’objecte inicialitzat, la cerca d’un subredit es realitza mitjançant el mètode new ().

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 = 'technology'
max_posts = 10
for submission in my_reddit.subreddit(sub_name).new(limit=max_posts):
print(submission.title)

Canvia el

sub_name

variable per obtenir publicacions de diferents subredits. En lloc de

new()

, altres mètodes com

hot()

estan disponibles per obtenir publicacions.

Cercant hashtags d’Instagram mitjançant InstagramAPI

El primer pas per utilitzar l’API d’Instagram és configurar un objecte amb l’identificador de client i el secret. Directament després, truqueu al mètode login () per completar la configuració.

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()

L’ús de l’API és una mica més complicat que el seu homòleg de Reddit. En aquest exemple, l'script utilitza getHashtagFeed per obtenir un objecte de resposta JSON molt gran d'Instagram.

Buscant a través de la resposta, l'script busca text de subtítols i després s'imprimeix a la pantalla per visualitzar-lo.

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

Afegiu imatges a les xarxes socials

Per avançar, és possible que vulgueu que el vostre script obtingui les imatges d’aquest feed d’etiquetes. Per fer-ho, passeu per la resposta JSON i cerqueu els suports associats a cada publicació. Aquí hi ha una implementació per extreure la informació de la resposta JSON:

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.keys():
candidate = get_largest_image(item['image_versions2']['candidates'])
# get image
filename = self.save_image_from_candidate(candidate['url'])
if filename != '':
# get status, save as tuple
caption = get_caption(item)
images.append((filename, caption))
if len(images) >= num_images:
break
return images

Hi ha dues funcions d'assistència que s'utilitzen en aquesta funció. Instagram envia una llista de 'candidats' de la imatge a la resposta JSON. Trieu la imatge més gran d’aquestes per tal que el contingut es mostri a la màxima resolució.

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

En segon lloc, un cop trobat l’enllaç a la imatge, podeu desar la imatge localment escrivint el contingut en un fitxer. Utilitzant el

requests

biblioteca ho fa senzill.

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

Emetent tuits amb Tweepy

En primer lloc, haureu de configurar l'accés a Twitter mitjançant els vostres secrets i claus.

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)

La creació d’un bot de retweet genèric es fa en poques línies.

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

Amb aquesta biblioteca es poden fer moltes altres coses. Per concloure aquest recorregut, podeu utilitzar el fitxer

get_images_from_hashtag

funció del bot d'Instagram creat anteriorment per twittear imatges i subtítols.

A més, el bot de Twitter pot cercar publicacions noves a Reddit i publicar-ne una altra. Per ajuntar aquestes dues funcionalitats es veu així:

# use r/ for reddit search
# and # for instagram search
hashtag = 'technology'
num_posts = 5
# tweet reddit info
reddit_posts = my_reddit.subreddit(hashtag).new(limit=num_posts)
for submission in reddit_posts:
title = submission.title
url = 'www.reddit.com{}'.format(submission.permalink)
tweet_str = f'Reddit r/{sub} update:
{title} #{sub} {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)
for (filename, message) in media_info:
try:
tweet_str = trim_to_280(message)
tw_api.update_with_media(filename, status=tweet_str)
except tweepy.TweepError as e:
print(e.reason)
except StopIteration:
break

El vostre bot de xarxes socials basat en Python ja està a punt.

Per tant, ara teniu un munt de codi que arrossega contingut multimèdia d’un lloc i publica a un altre. També podeu combinar. Tireu tweets i publiqueu a Reddit. Recopileu imatges d’Instagram per publicar-les a subredits. Feu un bot i sigueu part de la veritable internet.

Finalment, per automatitzar completament aquest procés, voldreu que els vostres robots funcionin en bucle en un servidor. Això podria estar al vostre propi ordinador amb un programador de temps. O bé, elimineu el vell Raspberry Pi que hi havia al vostre armari i mireu aquests dolços projectes de bot de Twitter per al Pi.

Compartir Compartir Tweet Correu electrònic A continuació s’explica per què l’FBI va emetre un advertiment sobre el ransomware Hive

L'FBI va emetre una advertència sobre una varietat de ransomware especialment desagradable. A continuació s’explica el motiu pel qual cal ser especialment cautelós amb el ransomware de Hive.

Llegiu a continuació
Temes relacionats
  • Programació
  • Python
  • Bots de xarxes socials
  • Tutorials de codificació
Sobre l'autor Tom Johnsen(3 articles publicats)

Tom és un enginyer de programari de Florida (cridat a Florida Man) amb una passió per l’escriptura, el futbol universitari (vaja Gators!), El CrossFit i les comes d’Oxford.

Més de Tom Johnsen

Subscriu-te al nostre butlletí

Uniu-vos al nostre butlletí per obtenir consells tècnics, ressenyes, llibres electrònics gratuïts i ofertes exclusives.

Feu clic aquí per subscriure-us