Hoe Twitter, Instagram en Reddit Bots te bouwen met Python

Hoe Twitter, Instagram en Reddit Bots te bouwen met Python

Het is 2019. Je hebt gehoord van bots. Er zijn chatbots, e-mailbots, webscraping-bots en sociale-mediabots. Heb je al een bot gemaakt? Het is verrassend eenvoudig. Waarschijnlijk waarom ze overal zijn. Omarm onze bot-overlords door zich bij hun rang aan te sluiten.





In dit artikel laat ik je zien hoe je Python kunt gebruiken om automatisch te communiceren met je Twitter-, Reddit- en Instagram-accounts.





Werken met Python

Deze walk-through gebruikt Python als taal bij uitstek. De gebruiksvoordelen van Python wegen zwaarder dan eventuele snelheidstekorten die het heeft in vergelijking met andere talen. Je kunt Python downloaden voor bijna elk besturingssysteem. Gebruik maken van de redacteur van uw keuze .





Python-distributies worden geassocieerd met het hulpprogramma genaamd

windows 10 maakt geen verbinding met wifi
pip

. Op het moment van schrijven zijn er meer dan 168.000 bibliotheken beschikbaar om te downloaden met behulp van



pip

. Voor de bots die u vandaag gaat maken, zijn er slechts drie nodig.

Vanaf de opdrachtregel kunt u de benodigde bibliotheken installeren met behulp van deze drie regels.





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

Nu kunt u deze bibliotheken waar nodig importeren.

Applicatiesleutels en geheimen verkrijgen

Een wijze filosoof zei ooit: 'Geheimen, geheimen zijn niet leuk. Geheimen, geheimen doen iemand pijn.' Met respect, de bots hebben geheimen nodig. De volgende stap bij het instellen van uw bots is om ze toegang te geven tot de API van elke site. Hiervoor heeft u een applicatiesleutel of geheim nodig.





Terwijl je sleutels, geheimen, tokens en meer verzamelt (klinkt als een leuk spel!), zet je ze allemaal in een enkel bestand met de naam 'credentials.py'. Dit bestand ziet er ongeveer zo uit:

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

Zeer belangrijke privacysuggestie: verbind dit bestand niet met broncontrole (bijv. Git). U wilt niet dat iemand anders deze sleutels en geheimen heeft. Ze worden niet voor niets geheimen genoemd.

Twitter-toegang instellen

Bekijk onze handleiding voor het opzetten van een Twitter-bot met Node.js en laat je zien hoe je je Twitter-app kunt maken. Houd er rekening mee dat Twitter enige tijd nodig heeft om uw account te verifiëren en ervoor te zorgen dat u geen spamaccount aanmaakt.

Nadat u deze stappen hebt gevolgd, kopieert u de consumentensleutel, het consumentengeheim, het toegangstoken en het toegangstokengeheim naar uw referenties.py-bestand.

Reddit-toegang instellen

Het verkrijgen van uw Reddit-client-ID en geheim lijkt erg op Twitter. U moet een app registreren als Reddit User Agent. Nadat je dit hebt gedaan, moet je absoluut 'Reddit User Agent' op je cv zetten.

Inloggen naar het Reddit-account van uw keuze. Navigeer naar de pagina met voorkeuren voor apps en Klik op een andere app maken . Noem uw user-agent iets nuttigs. Selecteer script voor het doel van uw app. De over-URL kan leeg worden gelaten. Vul een willekeurig adres in voor het omleidingsvak.

Na u Druk op app maken , wordt het volgende scherm aan u gepresenteerd met een lijst van uw apps. De cijfers onder uw toepassingsnaam vertegenwoordigen de client-ID en het clientgeheim bevindt zich daaronder. Kopieer deze waarden naar uw reference.py-bestand.

Instagram-toegang instellen

Instagram-toegang verschilt van Twitter en Reddit. In plaats van een app te registreren, gebruik je je gebruikersnaam en wachtwoord. Ik raad aan om een ​​apart openbaar account te maken en die details voor je bot te gebruiken.

Toegang krijgen tot Reddit met Praw

Het gebruik van garnalen is een proces in twee stappen. Ten eerste is het instellen van de toegang een enkele functieaanroep naar de Reddit-methode van praw. Vervolgens wordt met behulp van het geïnitialiseerde object een subreddit doorzocht met de methode new().

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)

Verander de

sub_name

variabele om berichten van verschillende subreddits te krijgen. In plaats van

new()

, andere methoden zoals

hot()

zijn beschikbaar om berichten te krijgen.

Instagram-hashtags zoeken via InstagramAPI

De eerste stap bij het gebruik van de Instagram API is het opzetten van een object met de client-ID en het geheim. Roep direct daarna de methode login() aan om de installatie te voltooien.

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

Het gebruik van de API is iets gecompliceerder dan zijn Reddit-tegenhanger. In dit voorbeeld gebruikt het script getHashtagFeed om een ​​zeer groot JSON-antwoordobject van Instagram te krijgen.

Het script doorzoekt het antwoord, zoekt naar bijschrifttekst en drukt het vervolgens af naar het scherm om het te bekijken.

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)

Afbeeldingen toevoegen aan sociale media

In de toekomst wil je misschien dat je script de afbeeldingen in deze hashtag-feed krijgt. Om dit te doen, doorloopt u het JSON-antwoord en zoekt u de media die bij elk bericht horen. Hier is een implementatie voor het extraheren van de informatie uit het JSON-antwoord:

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

Er zijn twee hulpfuncties die in deze functie worden gebruikt. Instagram stuurt een lijst met afbeelding 'kandidaten' in de JSON-reactie. Kies de grootste van deze afbeeldingen zodat de media in de hoogste resolutie wordt weergegeven.

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

Ten tweede, zodra de link naar de afbeelding is gevonden, kunt u de afbeelding lokaal opslaan door de inhoud naar een bestand te schrijven. De ... gebruiken

requests

bibliotheek maakt dit duidelijk.

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

Media uit tweeten met Tweepy

Eerst moet je Twitter-toegang instellen met je geheimen en sleutels.

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)

Het maken van een generieke retweet-bot gebeurt in slechts een paar regels.

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

Met deze bibliotheek kunnen nog veel meer dingen worden gedaan. Om deze walk-through af te ronden, kunt u de

get_images_from_hashtag

functie van de eerder gemaakte Instagram-bot om afbeeldingen en bijschriften te tweeten.

Bovendien kan uw Twitter-bot Reddit doorzoeken naar nieuwe berichten en deze ook tweeten. Het samenvoegen van beide functionaliteiten ziet er als volgt uit:

# 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

Je door Python aangedreven sociale media-bot is klaar!

Dus nu heb je een heleboel code die media van de ene site en berichten naar de andere haalt. Je kunt ook mixen en matchen. Trek tweets en post op Reddit. Verzamel Instagram-afbeeldingen om op subreddits te plaatsen. Maak een bot en maak deel uit van het echte internet.

Ten slotte, om dit proces volledig te automatiseren, wilt u dat uw bots in een lus op een server worden uitgevoerd. Dit kan op je eigen computer met een tijdplanner. Of stof die oude Raspberry Pi af die in je kast heeft gezeten en bekijk deze lieve Twitter-botprojecten voor de Pi.

Deel Deel Tweeten E-mail Dit is waarom de FBI een waarschuwing heeft afgegeven voor Hive Ransomware

De FBI waarschuwde voor een bijzonder vervelende vorm van ransomware. Dit is waarom je extra op je hoede moet zijn voor Hive-ransomware.

Lees volgende
Gerelateerde onderwerpen
  • Programmeren
  • Python
  • Bots voor sociale media
  • Codeerhandleidingen
Over de auteur Tom Johnsen(3 artikelen gepubliceerd)

Tom is een software-ingenieur uit Florida (shout-out naar Florida Man) met een passie voor schrijven, universiteitsvoetbal (go Gators!), CrossFit en Oxford-komma's.

Meer van Tom Johnsen

Abonneer op onze nieuwsbrief

Word lid van onze nieuwsbrief voor technische tips, recensies, gratis e-boeken en exclusieve deals!

Klik hier om je te abonneren