Sådan opbygges Twitter, Instagram og Reddit -bots ved hjælp af Python

Sådan opbygges Twitter, Instagram og Reddit -bots ved hjælp af Python

Det er 2019. Du har hørt om bots. Der er chatbots, e -mail -bots, webskrabningsbots og sociale medier -bots. Har du oprettet en bot endnu? Det er overraskende let. Sandsynligvis hvorfor de er overalt. Omfavn vores botoverherrer ved at slutte sig til deres rang.





I denne artikel viser jeg dig, hvordan du kan udnytte Python til automatisk at interagere med dine Twitter-, Reddit- og Instagram -konti.





Arbejde med Python

Denne gennemgang bruger Python som sit valgsprog. Pythons brugervenlige fordele opvejer eventuelle hastighedsmangler, den har sammenlignet med andre sprog. Du kan downloade Python til næsten ethvert operativsystem. Brug den valgte editor .





Python -distributioner er forbundet med det værktøj, der kaldes

google chrome bruger for meget hukommelse windows 10
pip

. I skrivende stund er der over 168.000 biblioteker tilgængelige til download ved hjælp af



pip

. Til de bots, du vil oprette i dag, er der kun brug for tre.

Fra kommandolinjen kan du installere de nødvendige biblioteker ved hjælp af disse tre linjer.





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

Nu kan du importere disse biblioteker, hvor det er nødvendigt.

Få applikationsnøgler og hemmeligheder

En klog filosof sagde engang 'Hemmeligheder, hemmeligheder er ikke sjovt. Hemmeligheder, hemmeligheder gør nogen ondt. ' Respektfuldt har robotterne brug for hemmeligheder. Det næste trin i opsætningen af ​​dine bots er at give dem adgang til API'et for hvert websted. For at gøre dette skal du bruge en applikationsnøgle eller hemmelighed.





Når du samler nøgler, hemmeligheder, tokens og mere (lyder som et sjovt spil!), Skal du lægge dem alle i en enkelt fil kaldet 'credentials.py.' Denne fil ville se sådan ud:

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

Meget vigtigt forslag til beskyttelse af personlige oplysninger: forplig ikke denne fil til nogen kildekontrol (f.eks. Git). Du vil ikke have, at andre skal have disse nøgler og hemmeligheder. De kaldes hemmeligheder af en grund.

Opsætning af Twitter -adgang

Se vores guide til opsætning af en Twitter -bot med Node.js, der viser dig, hvordan du opretter din Twitter -app. Bemærk, at Twitter vil tage noget tid at verificere din konto og sikre, at du ikke opretter en spam -konto.

Efter at have fulgt disse trin skal du kopiere forbrugernøglen, forbrugerhemmeligheden, adgangstokenet og adgangstokenhemmeligheden til din credentials.py -fil.

Opsætning af Reddit -adgang

At få dit Reddit -klient -id og hemmelighed ligner meget Twitter. Du skal registrere en app som en Reddit -brugeragent. Efter at have gjort dette, skal du absolut sætte 'Reddit User Agent' på dit CV.

Log ind til den valgte Reddit -konto. Naviger til apps præferencer side og Klik på Opret en anden app . Giv din brugeragent noget nyttigt. Vælg script til formålet med din app. Om URL'en kan efterlades tom. Udfyld enhver adresse til omdirigeringsboksen.

Efter dig Tryk på Opret app , vil følgende skærm blive præsenteret for dig med en liste over dine apps. Cifrene under dit applikationsnavn repræsenterer klient -id'et, og klienthemmeligheden er placeret under det. Kopier disse værdier til din credentials.py -fil.

Opsætning af Instagram -adgang

Adgang til Instagram adskiller sig fra Twitter og Reddit. I stedet for at registrere en app, bruger du dit brugernavn og din adgangskode. Jeg foreslår, at du opretter en separat offentlig konto og bruger disse oplysninger til din bot.

Adgang til Reddit med strå

Brug af rejer er en totrinsproces. For det første er opsætning af adgangen et enkelt funktionsopkald til Reddit -metoden til at leke. Derefter udføres søgning efter en subreddit ved hjælp af det initialiserede objekt ved hjælp af den nye () metode.

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)

Skift

sub_name

variabel for at få indlæg fra forskellige underreddits. I stedet for

new()

, andre metoder som f.eks

hot()

er tilgængelige for at få indlæg.

Søgning på Instagram Hashtags via InstagramAPI

Det første trin i at bruge Instagram API er at oprette et objekt med klient -id og hemmelighed. Lige derefter kalder du login () -metoden for at fuldføre opsætningen.

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

Brug af API'en er lidt mere kompliceret end dens Reddit -pendant. I dette eksempel bruger scriptet getHashtagFeed til at få et meget stort JSON -svarobjekt fra Instagram.

Når man søger gennem svaret, leder scriptet efter billedtekst og udskriver derefter til skærmen for at 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)

Føj billeder til sociale medier

Fremadrettet vil du måske have, at dit script får billederne i dette hashtag -feed. For at gøre dette skal du gå igennem JSON -svaret og finde de medier, der er knyttet til hvert indlæg. Her er en implementering til at udtrække oplysningerne 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

Der er to hjælperfunktioner, der bruges i denne funktion. Instagram sender en liste over billedkandidater i JSON -svaret. Vælg det største af disse billeder, så medierne vises i sin højeste oplø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 andet, når linket til billedet er fundet, kan du gemme billedet lokalt ved at skrive indholdet til en fil. Bruger

requests

bibliotek gør dette ligetil.

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 ud af medier med Tweepy

Først skal du konfigurere Twitter -adgang ved hjælp af dine hemmeligheder og nøgler.

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)

Oprettelse af en generisk retweet -bot sker på 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 gøres med dette bibliotek. For at afslutte denne gennemgang kan du bruge

get_images_from_hashtag

funktion fra den Instagram -bot, der blev lavet tidligere til at tweet ud billeder og billedtekster.

Derudover kan din Twitter -bot søge efter Reddit efter nye indlæg og også tweet dem. At sætte begge disse funktioner sammen ser således ud:

# 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 Social Media Bot er klar!

Så nu har du en masse kode, der trækker medier fra et websted og sender til et andet. Du kan også mikse og matche. Træk tweets og post til Reddit. Saml Instagram -billeder til at sende til subreddits. Lav en bot og vær en del af det rigtige internet.

Til sidst, for fuldt ud at automatisere denne proces, vil du have dine bots til at køre i en loop på en server. Dette kan være på din egen computer med en tidsplanlægger. Eller støv den gamle Raspberry Pi, der har været i dit skab, og tjek disse søde Twitter -bot -projekter til Pi.

Del Del Tweet E -mail Her er hvorfor FBI udsendte en advarsel for Hive Ransomware

FBI udsendte en advarsel om en særlig grim stamme af ransomware. Her er hvorfor du skal være særlig forsigtig med Hive ransomware.

Læs Næste
Relaterede emner
  • Programmering
  • Python
  • Bots på sociale medier
  • Kodning Tutorials
Om forfatteren Tom Johnsen(3 artikler udgivet)

Tom er en softwareingeniør fra Florida (råb til Florida Man) med en passion for at skrive, college fodbold (go Gators!), CrossFit og Oxford kommaer.

Mere fra Tom Johnsen

Abonner på vores nyhedsbrev

Tilmeld dig vores nyhedsbrev for at få tekniske tips, anmeldelser, gratis e -bøger og eksklusive tilbud!

Klik her for at abonnere