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 RansomwareFBI 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
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 JohnsenAbonner 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