Cum să construiești roboți Twitter, Instagram și Reddit folosind Python

Cum să construiești roboți Twitter, Instagram și Reddit folosind Python

Este 2019. Ai auzit de roboți. Există roboți de chat, roboți de e-mail, roboți de răzuire web și roboți de social media. Ați creat deja un bot? Este surprinzător de ușor. Probabil de ce sunt peste tot. Îmbrățișați-i pe roboții noștri, alăturându-le rangului.





În acest articol, vă voi arăta cum puteți utiliza Python pentru a interacționa automat cu conturile dvs. Twitter, Reddit și Instagram.





Lucrul cu Python

Acest parcurs folosește Python ca limbaj de alegere. Avantajele ușurinței de utilizare ale Python depășesc orice deficiențe de viteză pe care le are în comparație cu alte limbi. Puteți descărca Python pentru aproape orice sistem de operare. Utilizare editorul la alegere .





Distribuțiile Python sunt asociate cu utilitarul numit

descărcați muzică de pe iPod pe PC
pip

. La momentul scrierii, există peste 168.000 de biblioteci disponibile pentru descărcare folosind



pip

. Pentru roboții pe care îi veți crea astăzi, sunt necesari doar trei.

Din linia de comandă, puteți instala bibliotecile necesare folosind aceste trei linii.





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

Acum veți putea importa aceste biblioteci acolo unde este necesar.

Obținerea cheilor de aplicație și a secretelor

Un filozof înțelept a spus odată „Secretele, secretele nu sunt distractive. Secretele, secretele rănesc pe cineva. Respectuos, roboții au nevoie de secrete. Următorul pas în configurarea roboților dvs. este să le permiteți accesul la API-ul fiecărui site. Pentru a face acest lucru, veți avea nevoie de o cheie de aplicație sau un secret.





Pe măsură ce colectați chei, secrete, jetoane și multe altele (sună ca un joc distractiv!), Puneți-le pe toate într-un singur fișier numit „credentials.py”. Acest fișier ar arăta cam așa:

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

Sugestie de confidențialitate foarte importantă: nu comiteți acest fișier niciun control sursă (de exemplu, Git). Nu doriți ca altcineva să aibă aceste chei și secrete. Acestea sunt numite secrete dintr-un motiv.

Configurarea accesului Twitter

Consultați ghidul nostru pentru configurarea unui bot Twitter cu Node.js vă va arăta cum să creați aplicația dvs. Twitter. Rețineți că Twitter va dura ceva timp pentru a vă verifica contul și pentru a vă asigura că nu creați un cont spam.

După ce ați urmat acești pași, copiați cheia de consum, secretul consumatorului, jetonul de acces și secretul jetonului de acces în fișierul dvs. credentials.py.

Configurarea accesului Reddit

Obținerea codului și secretului de client Reddit este foarte asemănătoare cu Twitter. Va trebui să înregistrați o aplicație ca agent de utilizator Reddit. După ce ați făcut acest lucru, ar trebui să introduceți „Reddit User Agent” în CV.

Loghează-te în contul Reddit ales de dvs. Navigați la pagina preferințelor aplicațiilor și Faceți clic pe creați o altă aplicație . Denumiți agentul dvs. de utilizator ceva util. Selectați scriptul în scopul aplicației dvs. Adresa URL despre aceasta poate fi lăsată necompletată. Completați orice adresă pentru caseta de redirecționare.

Dupa tine Apăsați creați aplicație , următorul ecran vă va fi prezentat cu o listă a aplicațiilor dvs. Cifrele de sub numele aplicației dvs. reprezintă ID-ul clientului, iar secretul clientului se află sub acesta. Copiați aceste valori în fișierul dvs. credentials.py.

Configurarea accesului la Instagram

Accesul la Instagram diferă de Twitter și Reddit. În loc să înregistrați o aplicație, utilizați numele de utilizator și parola. Vă sugerez să creați un cont public separat și să utilizați aceste detalii pentru botul dvs.

Accesarea Reddit With Praw

Utilizarea praw este un proces în doi pași. În primul rând, configurarea accesului este o singură funcție de apel la metoda Reddit de praw. Apoi, folosind obiectul inițializat, căutarea unui subredit se face folosind metoda 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)

Schimba

sub_name

variabilă pentru a obține postări din diferite subreditări. In loc de

new()

, alte metode precum

hot()

sunt disponibile pentru a primi postări.

Căutarea hashtagurilor Instagram prin InstagramAPI

Primul pas în utilizarea API-ului Instagram este configurarea unui obiect cu ID-ul și secretul clientului. Imediat după aceea, apelați metoda login () pentru a finaliza configurarea.

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

Utilizarea API-ului este puțin mai complicată decât omologul său Reddit. În acest exemplu, scriptul folosește getHashtagFeed pentru a obține un obiect de răspuns JSON foarte mare de la Instagram.

Căutând prin răspuns, scriptul caută textul subtitrării și apoi se imprimă pe ecran pentru a-l vizualiza.

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)

Adăugați imagini pe rețelele sociale

Înainte, este posibil să doriți ca scriptul dvs. să obțină imaginile din acest feed hashtag. Pentru a face acest lucru, parcurgeți răspunsul JSON și găsiți media asociată cu fiecare postare. Iată o implementare pentru extragerea informațiilor din răspunsul 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

Există două funcții de ajutor utilizate în această funcție. Instagram trimite o listă de „candidați” ai imaginii în răspunsul JSON. Alegeți cea mai mare dintre aceste imagini, astfel încât media să fie afișată la cea mai înaltă rezoluție.

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

În al doilea rând, după ce se găsește linkul către imagine, puteți salva imaginea local scriind conținutul într-un fișier. Folosind

requests

biblioteca face acest lucru simplu.

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

Trimiteți mesaje media cu Tweepy

Mai întâi, va trebui să configurați accesul Twitter folosind secretele și cheile dvs.

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)

Crearea unui bot generic de retweet se face în doar câteva rânduri.

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

Multe alte lucruri pot fi făcute cu această bibliotecă. Pentru a încheia această prezentare, puteți utiliza

get_images_from_hashtag

funcție din botul Instagram realizat anterior pentru a trimite pe Twitter imagini și subtitrări.

În plus, botul dvs. de pe Twitter poate căuta Reddit pentru postări noi și le poate trimite pe tweet. A pune împreună aceste două funcționalități arată astfel:

# 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

Botul dvs. pentru rețele sociale bazat pe Python este gata!

Deci, acum aveți o grămadă de cod care trage conținut media de pe un site și postează pe altul. Poți amesteca și potrivi și tu. Trageți tweet-uri și postați pe Reddit. Colectează imagini Instagram pentru postare în subreddituri. Faceți un bot și faceți parte din adevăratul internet.

În cele din urmă, pentru a automatiza complet acest proces, veți dori ca roboții dvs. să ruleze în buclă pe un server. Acest lucru ar putea fi pe propriul computer cu un programator de timp. Sau îndepărtați vechiul Raspberry Pi care a fost în dulapul dvs. și verificați aceste proiecte de bot dulci Twitter pentru Pi.

Acțiune Acțiune Tweet E-mail Iată de ce FBI a emis un avertisment pentru Hive Ransomware

FBI a emis un avertisment cu privire la o tulpină deosebit de urâtă de ransomware. Iată de ce trebuie să fiți deosebit de atenți la ransomware-ul Hive.

Citiți în continuare
Subiecte asemănătoare
  • Programare
  • Piton
  • Roboți pentru rețelele sociale
  • Tutoriale de codare
Despre autor Tom Johnsen(3 articole publicate)

Tom este un inginer de software din Florida (strigând către Florida Man) cu pasiune pentru scris, fotbal universitar (du-te Gators!), CrossFit și virgule Oxford.

Mai multe de la Tom Johnsen

Aboneaza-te la newsletter-ul nostru

Alăturați-vă newsletter-ului pentru sfaturi tehnice, recenzii, cărți electronice gratuite și oferte exclusive!

Faceți clic aici pentru a vă abona