Hvordan bygge Twitter, Instagram og Reddit -roboter ved hjelp av Python

Hvordan bygge Twitter, Instagram og Reddit -roboter ved hjelp av Python

Det er 2019. Du har hørt om roboter. Det er chat -roboter, e -postbots, web -skrapebots og sosiale medier -roboter. Har du laget en bot ennå? Det er overraskende enkelt. Sannsynligvis hvorfor de er overalt. Omfavn våre botoverherrer ved å bli med på deres rang.





I denne artikkelen viser jeg deg hvordan du kan utnytte Python til å samhandle med Twitter-, Reddit- og Instagram -kontoene dine automatisk.





Jobber med Python

Denne gjennomgangen bruker Python som sitt valgspråk. Pythons brukervennlige fordeler oppveier eventuelle hastighetsmangler den har sammenlignet med andre språk. Du kan laste ned Python for nesten alle operativsystemer. Bruk redaktøren du ønsker .





Python -distribusjoner kommer i forbindelse med verktøyet som kalles

hva skal jeg installere på en ny pc
pip

. I skrivende stund er det over 168 000 biblioteker tilgjengelig for nedlasting



pip

. For botsene du skal lage i dag, trengs bare tre.

Fra kommandolinjen kan du installere de nødvendige bibliotekene ved hjelp av disse tre linjene.





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

Nå kan du importere disse bibliotekene der det trengs.

Få søknader og hemmeligheter

En klok filosof sa en gang 'Hemmeligheter, hemmeligheter er ikke gøy. Hemmeligheter, hemmeligheter skader noen. ' Respektfullt trenger robotene hemmeligheter. Det neste trinnet i konfigureringen av roboter er å gi dem tilgang til API -et til hvert nettsted. For å gjøre dette trenger du en applikasjonsnøkkel eller hemmelighet.





Når du samler nøkler, hemmeligheter, tokens og mer (høres ut som et morsomt spill!), Legger du dem alle i en enkelt fil som kalles 'credentials.py.' Denne filen vil se omtrent slik ut:

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

Veldig viktig forslag til personvern: ikke forplikt denne filen til noen kildekontroll (f.eks. Git). Du vil ikke at noen andre skal ha disse nøklene og hemmelighetene. De kalles hemmeligheter av en grunn.

Sette opp Twitter -tilgang

Ta en titt på vår guide for hvordan du konfigurerer en Twitter -bot med Node.js, og viser deg hvordan du oppretter Twitter -appen din. Vær oppmerksom på at Twitter vil ta litt tid å bekrefte kontoen din og sikre at du ikke oppretter en spam -konto.

Etter å ha fulgt disse trinnene, kopierer du forbrukernøkkelen, forbrukerhemmeligheten, tilgangstokenet og tilgangstokenhemmeligheten til filen credentials.py.

Konfigurere Reddit Access

Å få din Reddit -klient -ID og hemmelighet er veldig lik Twitter. Du må registrere en app som en Reddit -brukeragent. Etter å ha gjort dette, bør du absolutt sette 'Reddit User Agent' på CV -en din.

Logg inn til Reddit -kontoen du velger. Naviger til appers preferanseside og Klikk på opprett en annen app . Gi brukeragenten noe nyttig. Velg skript for formålet med appen din. Omtrentlige nettadresser kan stå tomme. Fyll inn en adresse for viderekoblingsboksen.

Etter deg Trykk på opprett app , vil følgende skjermbilde bli presentert for deg med en liste over appene dine. Sifrene under applikasjonsnavnet representerer klient -ID -en, og klienthemmeligheten ligger under det. Kopier disse verdiene til credentials.py -filen.

Sette opp Instagram -tilgang

Tilgang til Instagram skiller seg fra Twitter og Reddit. I stedet for å registrere en app, bruker du brukernavn og passord. Jeg foreslår at du oppretter en egen offentlig konto og bruker disse detaljene for boten din.

Få tilgang til Reddit med Praw

Å bruke reke er en to-trinns prosess. For det første er oppsett av tilgang et enkelt funksjonsanrop til Reddit -metoden for reke. Deretter, ved hjelp av det initialiserte objektet, søkes en subreddit utføres ved hjelp av den nye () metoden.

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)

Endre

sub_name

variabel for å få innlegg fra forskjellige subreddits. I stedet for

new()

, andre metoder som

hot()

er tilgjengelig for å få innlegg.

Søker på Instagram -hashtags via InstagramAPI

Det første trinnet i å bruke Instagram API er å sette opp et objekt med klient -ID og hemmelighet. Rett etter det, ring innloggingsmetoden () for å fullføre oppsettet.

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

Å bruke API er litt mer komplisert enn dets Reddit -motstykke. I dette eksemplet bruker skriptet getHashtagFeed for å få et veldig stort JSON -svarobjekt fra Instagram.

Ved å søke gjennom svaret, ser skriptet etter bildetekst og skrives ut til skjermen for å se det.

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)

Legg til bilder i sosiale medier

Fremover vil du kanskje at skriptet ditt skal få bildene i denne hashtag -feedet. For å gjøre dette, gå gjennom JSON -svaret og finn media som er knyttet til hvert innlegg. Her er en implementering for å trekke ut informasjonen fra JSON -svaret:

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

Det er to hjelperfunksjoner som brukes i denne funksjonen. Instagram sender en liste over bildekandidater i JSON -svaret. Velg det største av disse bildene slik at mediene vises i sin høyeste oppløsning.

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

For det andre, når koblingen til bildet er funnet, kan du lagre bildet lokalt ved å skrive innholdet til en fil. Bruker

requests

biblioteket gjør dette greit.

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

Tweeting ut medier med Tweepy

Først må du konfigurere Twitter -tilgang ved å bruke dine hemmeligheter og nøkler.

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)

Å lage en generisk retweet -bot gjøres på bare noen få linjer.

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

Mange andre ting kan gjøres med dette biblioteket. For å avslutte denne gjennomgangen kan du bruke

get_images_from_hashtag

funksjon fra Instagram -boten som ble laget tidligere for å tweet ut bilder og bildetekster.

I tillegg kan din Twitter -bot søke i Reddit etter nye innlegg og tweet dem også. Å sette begge disse funksjonene sammen ser slik ut:

# 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

Din Python-drevne sosiale medier-bot er klar!

Så, nå har du en haug med kode som henter media fra et nettsted og legger inn et annet. Du kan også mikse og matche. Trekk tweets og legg ut til Reddit. Samle Instagram -bilder for å legge ut på subreddits. Lag en bot og bli en del av det virkelige internett.

Til slutt, for å automatisere denne prosessen fullt ut, vil du at robotene dine skal kjøre i en sløyfe på en server. Dette kan være på din egen datamaskin med en tidsplanlegger. Eller støv av den gamle Raspberry Pi som har ligget i skapet ditt, og sjekk ut disse søte Twitter -botprosjektene for Pi.

Dele Dele kvitring E -post Her er hvorfor FBI utstedte en advarsel for Hive Ransomware

FBI utstedte en advarsel om en spesielt ekkel stamme av ransomware. Her er hvorfor du må være spesielt forsiktig med Hive ransomware.

Les neste
Relaterte temaer
  • Programmering
  • Python
  • Bots for sosiale medier
  • Opplæringsprogrammer for koding
Om forfatteren Tom Johnsen(3 artikler publisert)

Tom er en programvareingeniør fra Florida (shout-out til Florida Man) med en lidenskap for skriving, college-fotball (go Gators!), CrossFit og Oxford-kommaer.

Mer fra Tom Johnsen

Abonner på vårt nyhetsbrev

Bli med i vårt nyhetsbrev for tekniske tips, anmeldelser, gratis ebøker og eksklusive tilbud!

Klikk her for å abonnere