Slik bygger du Twitter-, Instagram- og Reddit-roboter ved hjelp av Python
Annonse
Det er 2019. Du har hørt om roboter. Det er chat-roboter, e-post-bots, skrapebots på nettet og sosiale medier-bots. Har du laget en bot ennå? Det er overraskende enkelt. Sannsynligvis hvorfor de er over alt. Omfavn botoverherrene våre ved å bli rang.
I denne artikkelen skal jeg vise deg hvordan du kan utnytte Python til å samhandle med Twitter-, Reddit- og Instagram-kontoene dine automatisk.
Jobber med Python
Denne gjennomgangen bruker Python som valg av språk 6 grunner til at Python er fremtidens programmeringsspråk 6 grunner til at Python er fremtidens programmeringsspråk Vil du lære eller utvide dine programmeringsevner? Her er grunnen til at Python er det beste programmeringsspråket å lære i år. Les mer . Pythons brukervennlige fordeler oppveier alle hastighetsmangler det har sammenlignet med andre språk. Du kan laste ned Python for nesten alle operativsystemer. Bruk redigereren du ønsker.
Python-distribusjoner kommer assosiert med verktøyet som kalles pip
. I skrivende stund er det over 168 000 biblioteker tilgjengelig for nedlasting ved bruk av pip
. For bottene du oppretter i dag, er det bare tre som trengs.
Fra kommandolinjen kan du installere bibliotekene som trengs ved hjelp av disse tre linjene.
pip install --upgrade InstagramAPI pip install --upgrade tweepy pip install --upgrade praw
Nå vil du kunne importere disse bibliotekene når det er nødvendig.
Få applikasjonsnøkler og hemmeligheter
En klok filosof sa en gang “Hemmeligheter, hemmeligheter er ikke gøy. Hemmeligheter, hemmeligheter skader noen. ”Respektivt, robotene trenger hemmeligheter. Det neste trinnet med å sette opp bots er å gi dem tilgang til API-en for hvert nettsted. For å gjøre dette, trenger du en applikasjonsnøkkel eller hemmelighet.
Når du samler nøkler, hemmeligheter, symboler og mer (høres ut som et morsomt spill!), Plasserer du dem alle i en enkelt fil som heter “credentials.py.” Denne filen ser ut som sånn:
# 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 = ''
Svært viktig forslag til personvern: ikke begi denne filen 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
Sjekk ut vår guide til å sette opp en Twitter-bot med Node.js vil vise deg hvordan du oppretter din Twitter-app. Slik bygger du et bilde Tweeting Twitter Bot med Raspberry Pi og Node.js Hvordan du bygger et bilde Node.js Kom i gang med Node.js og lag en Twitter-bot som tweets bilder og informasjon ved å bruke bare en Raspberry Pi! Les mer . 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 credentials.py-filen.
Sette opp Reddit Access
Å få Reddit-klient-ID og hemmelighet ligner veldig på Twitter. Du må registrere en app som Reddit User Agent. Etter å ha gjort dette, bør du absolutt sette “Reddit User Agent” på CVen.
Logg deg på Reddit-kontoen du velger. Naviger til siden med innstillinger for apper, og klikk opprett en annen app . Gi brukeragenten din noe nyttig. Velg skript for appens formål. Om URLen kan stå tom. Fyll ut hvilken som helst adresse for viderekoblingsboksen.
Etter at du har trykket på opprett app, vil følgende skjermbilde bli presentert for deg med en liste over appene dine. Sifrene under applikasjonsnavnet ditt representerer klient-IDen, og klienthemmeligheten ligger under den. Kopier disse verdiene til credentials.py-filen.
Sette opp Instagram Access
Instagram-tilgang 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 With Praw
Å bruke rop er en totrinns prosess. For det første er konfigurering av tilgangen en enkeltfunksjonsanrop til Reddit-metoden for praw. Deretter, ved å bruke det initialiserte objektet, søker du i en subreddit ved å bruke 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
å få innlegg fra forskjellige subreddits. I stedet for new()
, er andre metoder som hot()
tilgjengelige 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 konfigurasjonen.
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 sin Reddit-motpart. I dette eksemplet bruker manuset getHashtagFeed for å få et veldig stort JSON-svarobjekt fra Instagram.
Når du søker gjennom svaret, ser skriptet etter teksttekst og skrives deretter ut på 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
Når du beveger deg fremover, kan det hende du vil at skriptet skal få bildene i denne hashtag-strømmen. For å gjøre dette, gå gjennom JSON-svaret og finn media tilknyttet 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 mediet vises i den høyeste oppløsningen.
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 lenken til bildet er funnet, kan du lagre bildet lokalt ved å skrive innholdet til en fil. Å bruke requests
gjør dette enkelt.
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 Media med Tweepy
Først må du konfigurere Twitter-tilgang ved hjelp av 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
funksjonen fra Instagram-boten som er laget tidligere for å tweete ut bilder og bildetekster.
I tillegg kan din Twitter-bot søke på Reddit etter nye innlegg og tweet dem ut også. Å sette begge disse funksjonalitetene 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:\n\n{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 medie Bot er klar!
Så nå har du en haug med kode som drar medier fra ett nettsted og poster til 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 vær en del av det virkelige internett.
Til slutt, for å fullstendig automatisere denne prosessen, vil du at robotene dine skal løpe i en løkke 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 10 Beste Twitter Bot-prosjekter for Raspberry Pi 10 Beste Twitter Bot-prosjekter for Raspberry Pi Les mer.
Utforsk mer om: Kodingsveiledninger, Python, Bots for sosiale medier.