Hur man bygger Twitter, Instagram och Reddit Bots med Python

Hur man bygger Twitter, Instagram och Reddit Bots med Python

Det är 2019. Du har hört talas om bots. Det finns chattbots, e -postbots, webbskrapbots och sociala medier -bots. Har du skapat en bot än? Det är förvånansvärt enkelt. Förmodligen varför de är överallt. Omfamna våra bot -herrar genom att gå med i deras rang.





I den här artikeln visar jag dig hur du kan utnyttja Python för att interagera med dina Twitter-, Reddit- och Instagram -konton automatiskt.





Arbetar med Python

Denna genomgång använder Python som sitt valda språk. Pythons användarvänliga fördelar uppväger eventuella hastighetsbrister den har jämfört med andra språk. Du kan ladda ner Python för nästan alla operativsystem. Använda sig av den redaktör du väljer .





Python -distributioner är associerade med verktyget som kallas

hur man får spel att springa snabbare windows 10
pip

. I skrivande stund finns det över 168 000 bibliotek tillgängliga för nedladdning med



pip

. För de bots du skapar idag behövs bara tre.

Från kommandoraden kan du installera de bibliotek som behövs med dessa tre rader.





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

Nu kan du importera dessa bibliotek där det behövs.

Få applikationsnycklar och hemligheter

En klok filosof sa en gång 'Hemligheter, hemligheter är inte roliga. Hemligheter, hemligheter skadar någon. ' Respektfullt behöver robotarna hemligheter. Nästa steg i att konfigurera dina bots är att ge dem åtkomst till API för varje webbplats. För att göra detta behöver du en programnyckel eller hemlighet.





När du samlar nycklar, hemligheter, tokens och mer (låter som ett roligt spel!) Lägger du dem alla i en enda fil som heter 'credentials.py'. Den här filen skulle se ut ungefär så här:

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

Mycket viktigt sekretessförslag: begär inte denna fil någon källkontroll (t.ex.Git). Du vill inte att någon annan ska ha dessa nycklar och hemligheter. De kallas hemligheter av en anledning.

Konfigurera Twitter -åtkomst

Kolla in vår guide för att konfigurera en Twitter -bot med Node.js visar hur du skapar din Twitter -app. Observera att Twitter tar lite tid att verifiera ditt konto och se till att du inte skapar ett skräppostkonto.

Efter att ha följt dessa steg kopierar du konsumentnyckeln, konsumenthemligheten, åtkomsttoken och åtkomsttokenhemligheten till din credentials.py -fil.

Konfigurera Reddit Access

Att få ditt Reddit -klient -ID och hemlighet liknar mycket Twitter. Du måste registrera en app som en Reddit -användaragent. Efter att ha gjort detta bör du absolut lägga 'Reddit User Agent' på ditt CV.

Logga in till det Reddit -konto du väljer. Navigera till apps inställningssida och Klicka på skapa en annan app . Ge användaragenten något användbart. Välj skript för din app. Webbadressen kan lämnas tom. Fyll i vilken adress som helst för omdirigeringsrutan.

Efter dig Tryck på skapa app kommer följande skärm att presenteras för dig med en lista över dina appar. Siffrorna under ditt applikationsnamn representerar klient -ID och klienthemligheten finns under det. Kopiera dessa värden till din credentials.py -fil.

Konfigurera Instagram Access

Instagram -åtkomst skiljer sig från Twitter och Reddit. Istället för att registrera en app använder du ditt användarnamn och lösenord. Jag föreslår att du skapar ett separat offentligt konto och använder dessa uppgifter för din bot.

Åtkomst till Reddit med Praw

Att använda räka är en tvåstegsprocess. För det första är inställningen av åtkomsten ett enda funktionsanrop till reddit -metoden för räka. Sedan, med det initialiserade objektet, görs en subreddit -sökning med den nya () 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)

Ändra

sub_name

variabel för att få inlägg från olika subreddits. Istället för

new()

, andra metoder som

hot()

finns tillgängliga för att få inlägg.

Söker Instagram Hashtags via InstagramAPI

Det första steget i att använda Instagram API är att konfigurera ett objekt med klient -ID och hemlighet. Direkt efter det, ring inloggning () -metoden för att slutföra installationen.

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

Att använda API är lite mer komplicerat än dess Reddit -motsvarighet. I det här exemplet använder skriptet getHashtagFeed för att få ett mycket stort JSON -svarobjekt från Instagram.

Genom att söka igenom svaret letar manuset efter bildtext och skriver sedan ut på skärmen för att 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)

Lägg till bilder i sociala medier

Om du går framåt kanske du vill att ditt manus ska få bilderna i detta hashtag -flöde. För att göra detta, gå igenom JSON -svaret och hitta media som är kopplat till varje inlägg. Här är en implementering för att extrahera informationen från 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 finns två hjälpfunktioner som används i denna funktion. Instagram skickar en lista över bildkandidater i JSON -svaret. Välj den största av dessa bilder så att media visas i högsta upplö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

För det andra, när länken till bilden har hittats kan du spara bilden lokalt genom att skriva innehållet till en fil. Använda

requests

biblioteket gör det 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

Twittra ut media med Tweepy

Först måste du konfigurera Twitter -åtkomst med dina hemligheter och nycklar.

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)

Att skapa en generisk retweet -bot görs på bara några rader.

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

Många andra saker kan göras med detta bibliotek. För att avsluta denna genomgång kan du använda

get_images_from_hashtag

funktion från Instagram -boten som gjorts tidigare för att twittra ut bilder och bildtexter.

Dessutom kan din Twitter -bot söka efter Reddit efter nya inlägg och twittra ut dem också. Att sätta ihop båda dessa funktioner ser ut så här:

# 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-driven Social Media Bot är klar!

Så nu har du en massa kod som hämtar media från en webbplats och postar till en annan. Du kan också mixa och matcha. Dra tweets och lägg upp till Reddit. Samla Instagram -bilder för att lägga upp dem på subreddits. Gör en bot och bli en del av det riktiga internet.

Slutligen, för att helt automatisera denna process, vill du att dina bots ska köras i en loop på en server. Detta kan vara på din egen dator med en tidsplanerare. Eller, damma av den gamla Raspberry Pi som har funnits i din garderob och kolla in dessa söta Twitter -botprojekt för Pi.

Dela med sig Dela med sig Tweet E-post Här är varför FBI utfärdade en varning för Hive Ransomware

FBI utfärdade en varning om en särskilt otäck stam av ransomware. Här är varför du måste vara särskilt försiktig med Hive -ransomware.

Läs Nästa
Relaterade ämnen
  • Programmering
  • Pytonorm
  • Sociala medier Bots
  • Handledning för kodning
Om författaren Tom Johnsen(3 artiklar publicerade)

Tom är en programvaruingenjör från Florida (skrik ut till Florida Man) med en passion för att skriva, college-fotboll (go Gators!), CrossFit och Oxford-kommatecken.

Mer från Tom Johnsen

Prenumerera på vårt nyhetsbrev

Gå med i vårt nyhetsbrev för tekniska tips, recensioner, gratis e -böcker och exklusiva erbjudanden!

Klicka här för att prenumerera