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 RansomwareFBI 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
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 JohnsenAbonner på vårt nyhetsbrev
Bli med i vårt nyhetsbrev for tekniske tips, anmeldelser, gratis ebøker og eksklusive tilbud!
Klikk her for å abonnere