Kako izgraditi Twitter, Instagram i Reddit botove pomoću Pythona

Kako izgraditi Twitter, Instagram i Reddit botove pomoću Pythona

2019. je. Čuli ste za botove. Postoje chat roboti, roboti e -pošte, roboti za struganje weba i roboti na društvenim mrežama. Jeste li već stvorili bot? Iznenađujuće je lako. Vjerojatno su zato posvuda. Prihvatite naše nadređene botove pridružujući se njihovom rangu.





U ovom članku pokazat ću vam kako možete iskoristiti Python za automatsku interakciju s vašim Twitter, Reddit i Instagram računima.





Rad s Pythonom

Ovaj vodič koristi Python kao jezik po izboru. Pythonove prednosti u jednostavnosti korištenja nadmašuju sve nedostatke u brzini u usporedbi s drugim jezicima. Python možete preuzeti za gotovo sve OS. Koristiti urednik po vašem izboru .





Python distribucije dolaze povezane s uslužnim programom koji se zove

ako odbijete zahtjev za prijateljstvo na facebooku, mogu li vas ponovno dodati
pip

. U vrijeme pisanja ovog članka postoji više od 168 000 knjižnica dostupnih za preuzimanje



pip

. Za botove koje ćete danas izraditi potrebna su samo tri.

Iz naredbenog retka možete instalirati potrebne knjižnice pomoću ova tri retka.





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

Sada ćete moći uvesti te knjižnice po potrebi.

Dobivanje ključeva i tajni aplikacije

Mudri filozof jednom je rekao: „Tajne, tajne nisu zabavna. Tajne, tajne nekoga povrijede. ' S poštovanjem, roboti trebaju tajne. Sljedeći korak u postavljanju vaših robota je omogućiti im pristup API -ju svake web stranice. Da biste to učinili, trebat će vam ključ aplikacije ili tajna.





Dok prikupljate ključeve, tajne, žetone i još mnogo toga (zvuči kao zabavna igra!), Sve ih stavite u jednu datoteku pod nazivom 'credentials.py'. Ova bi datoteka izgledala otprilike ovako:

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

Vrlo važan prijedlog privatnosti: nemojte predati ovoj datoteci nikakvu izvornu kontrolu (npr. Git). Ne želite da netko drugi ima ove ključeve i tajne. S razlogom se nazivaju tajnama.

Postavljanje pristupa Twitteru

Pogledajte naš vodič za postavljanje Twitter robota s Node.js pokazat će vam kako stvoriti svoju Twitter aplikaciju. Imajte na umu da će Twitteru trebati neko vrijeme da potvrdi vaš račun i osigura da ne kreirate neželjeni račun.

Nakon što slijedite ove korake, kopirajte potrošački ključ, tajnu potrošača, pristupni token i tajnu pristupnog tokena u svoju datoteku credentials.py.

Postavljanje Reddit pristupa

Dobivanje ID -a klijenta i njegove tajne za Reddit vrlo je slično Twitteru. Morat ćete registrirati aplikaciju kao Reddit korisnički agent. Nakon što to učinite, apsolutno morate staviti 'Reddit User Agent' u svoj životopis.

Prijaviti se na Reddit račun po vašem izboru. Idite na stranicu sa postavkama aplikacija i Kliknite na stvaranje druge aplikacije . Dajte korisničkom agentu ime korisno. Odaberite skriptu u svrhu vaše aplikacije. URL o informaciji može ostati prazan. Ispunite bilo koju adresu za okvir za preusmjeravanje.

Poslije tebe Pritisnite stvoriti aplikaciju , na sljedećem zaslonu bit će vam predstavljen popis vaših aplikacija. Znamenke pod imenom vaše aplikacije predstavljaju ID klijenta, a tajna klijenta nalazi se ispod toga. Kopirajte ove vrijednosti u datoteku credentials.py.

Postavljanje pristupa Instagramu

Pristup Instagramu razlikuje se od Twittera i Reddita. Umjesto registracije aplikacije, koristite svoje korisničko ime i lozinku. Predlažem stvaranje zasebnog javnog računa i korištenje tih podataka za vašeg bota.

Pristup Redditu uz Praw

Korištenje kozica postupak je u dva koraka. Prvo, postavljanje pristupa je poziv jedne funkcije Reddit metodi kozica. Zatim se pomoću inicijaliziranog objekta pretraživanje podredita vrši pomoću metode 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)

Promijeni

sub_name

varijabla za dobivanje postova iz različitih podredova. Umjesto

new()

, druge metode kao što su

hot()

dostupni su za dobivanje postova.

Pretraživanje Instagram oznaka putem InstagramAPI

Prvi korak u korištenju Instagram API -ja je postavljanje objekta s ID -om klijenta i tajnom. Odmah nakon toga, nazovite login () metodu za dovršetak postavljanja.

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

Korištenje API -ja malo je složenije od njegovog Reddit -a. U ovom primjeru skripta koristi getHashtagFeed za dobivanje vrlo velikog JSON objekta odgovora od Instagrama.

Pretražujući odgovor, skripta traži tekst natpisa, a zatim ispisuje na zaslon kako bi ga pogledala.

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)

Dodajte slike društvenim medijima

Ako krenete naprijed, možda ćete htjeti da vaša skripta dobije slike u ovom feedu hashtaga. Da biste to učinili, prođite kroz JSON odgovor i pronađite medije povezane sa svakim postom. Evo implementacije za izdvajanje informacija iz JSON odgovora:

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

U ovoj se funkciji koriste dvije pomoćne funkcije. Instagram šalje popis slikovnih 'kandidata' u JSON odgovoru. Odaberite najveću od ovih slika tako da se mediji prikazuju u najvećoj razlučivosti.

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

Drugo, nakon što se pronađe veza do slike, sliku možete spremiti lokalno zapisujući sadržaj u datoteku. Koristiti

requests

knjižnica čini ovo jednostavnim.

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

Čitanje medija putem Tweepyja

Prvo ćete morati postaviti pristup Twitteru pomoću svojih tajni i ključeva.

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)

Stvaranje generičkog retweet bot -a vrši se u samo nekoliko redaka.

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

Mnoge druge stvari mogu se učiniti s ovom bibliotekom. Za završetak ovog pregleda možete upotrijebiti

get_images_from_hashtag

funkciju iz Instagram bota ranije napravljenu za tweetanje slika i opisa.

Osim toga, vaš Twitter bot može pretraživati ​​Reddit za nove postove i tweetati ih. Spajanje obje ove funkcionalnosti izgleda ovako:

# 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

Vaš bot za društvene mreže s Python-om je spreman!

Dakle, sada imate hrpu koda koji izvlači medije s jedne stranice i objavljuje na drugu. Također možete miješati i slagati. Povucite tweetove i objavite ih na Redditu. Prikupite Instagram slike za objavljivanje u podredima. Napravite bot i postanite dio pravog interneta.

Na kraju, da biste potpuno automatizirali ovaj proces, htjet ćete da se vaši roboti izvode u petlji na poslužitelju. To bi moglo biti na vašem računalu s rasporedom vremena. Ili uklonite prašinu sa starog Raspberry Pi -a koji vam je bio u ormaru i pogledajte ove slatke Twitter bot projekte za Pi.

Udio Udio Cvrkut E -pošta Evo zašto je FBI izdao upozorenje za otkupni softver u košnicama

FBI je izdao upozorenje o posebno gadnoj vrsti ransomwarea. Evo zašto morate biti posebno oprezni s Hive ransomwareom.

Pročitajte Dalje
Povezane teme
  • Programiranje
  • Piton
  • Botovi za društvene mreže
  • Vodiči za kodiranje
O autoru Tom Johnsen(3 objavljena članka)

Tom je softverski inženjer s Floride (vikni Floridi) sa strašću za pisanjem, fakultetskim nogometom (go Gators!), CrossFitom i zarezima iz Oxforda.

Više od Toma Johnsena

Pretplatite se na naše obavijesti

Pridružite se našem biltenu za tehničke savjete, recenzije, besplatne e -knjige i ekskluzivne ponude!

Kliknite ovdje za pretplatu