Hoe Twitter, Instagram en Reddit Bots te bouwen met behulp van Python
Advertentie
Het is 2019. Je hebt gehoord van bots. Er zijn chat bots, e-mail bots, web scraping bots en sociale media bots. Heb je al een bot gemaakt? Het is verrassend eenvoudig. Waarschijnlijk waarom ze overal zijn. Omarm onze bot-overheersers door lid te worden van hun rang.
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 zijn voorkeurstaal 6 Redenen Waarom Python is de programmeertaal van de toekomst 6 Redenen Waarom Python is de programmeertaal van de toekomst Wil je je programmeervaardigheden leren of uitbreiden? Dit is de reden waarom Python dit jaar de beste programmeertaal is om te leren. Lees verder . De gebruiksgemakvoordelen van Python wegen zwaarder dan de snelheden die het heeft in vergelijking met andere talen. Je kunt Python downloaden voor bijna elk besturingssysteem. Gebruik de gewenste editor.
Python-distributies worden geassocieerd met het hulpprogramma pip
. Op het moment van schrijven zijn er meer dan 168.000 bibliotheken beschikbaar om te downloaden met pip
. Voor de bots die je vandaag maakt, 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.
Toepassingssleutels en geheimen verkrijgen
Een wijze filosoof zei ooit: “Geheimen, geheimen zijn niet leuk. Geheimen, geheimen doen iemand pijn. ”Respectvol hebben de bots geheimen nodig. De volgende stap bij het instellen van uw bots is om ze toegang te geven tot de API van elke site. Om dit te doen, hebt u een applicatiesleutel of geheim nodig.
Terwijl u sleutels, geheimen, tokens en meer verzamelt (klinkt als een leuk spel!), Plaatst u ze allemaal in één 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 suggestie voor privacy: leg dit bestand geen bronbeheer toe (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 gids voor het opzetten van een Twitter-bot met Node.js laat je zien hoe je je Twitter-app kunt maken. Hoe maak je een foto met Twitter Bot met Raspberry Pi en Node.js. Node.js Ga aan de slag met Node.js en maak een Twitter-bot die foto's en informatie tweet met slechts een Raspberry Pi! Lees verder . Houd er rekening mee dat Twitter enige tijd nodig heeft om uw account te verifiëren en ervoor te zorgen dat u geen spamaccount maakt.
Nadat u deze stappen hebt gevolgd, kopieert u de consumentensleutel, het consumentengeheim, het toegangstoken en het toegangstokengeheim naar uw credentials.py-bestand.
Reddit-toegang instellen
Het verkrijgen van uw Reddit-klant-ID en geheim lijkt erg op Twitter. U moet een app registreren als een Reddit User Agent. Nadat je dit hebt gedaan, moet je absoluut “Reddit User Agent” op je cv zetten.
Meld u aan bij het Reddit-account van uw keuze. Navigeer naar de pagina met apps-voorkeuren en klik op nog een app maken . Noem uw user-agent iets nuttigs. Selecteer script voor het doel van uw app. De URL over kan leeg worden gelaten. Vul een willekeurig adres in voor het omleidingsvak.
Nadat u op app maken hebt gedrukt, verschijnt het volgende scherm met een lijst met uw apps. De cijfers onder de naam van uw applicatie vertegenwoordigen de klant-ID en het klantgeheim bevindt zich daaronder. Kopieer deze waarden naar uw credentials.py-bestand.
Instagram-toegang instellen
Instagram-toegang verschilt van Twitter en Reddit. In plaats van een app te registreren, gebruikt u uw gebruikersnaam en wachtwoord. Ik stel voor om een afzonderlijk openbaar account te maken en die details voor je bot te gebruiken.
Toegang tot Reddit met Praw
Het gebruik van praw 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 gezocht 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)
Wijzig de variabele sub_name
om berichten uit verschillende subreddits te krijgen. In plaats van new()
, zijn andere methoden zoals hot()
beschikbaar om berichten te ontvangen.
Zoeken naar Instagram-hashtags via InstagramAPI
De eerste stap bij het gebruik van de Instagram API is het instellen van een object met de klant-ID en geheim. Direct daarna roept u 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 ingewikkelder dan zijn Reddit-tegenhanger. In dit voorbeeld gebruikt het script getHashtagFeed om een zeer groot JSON-reactieobject van Instagram te krijgen.
Door het antwoord zoekend, zoekt het script naar ondertitelingstekst en wordt het vervolgens op het scherm afgedrukt 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 wilt u misschien dat uw script de afbeeldingen in deze hashtag-feed krijgt. Om dit te doen, loop je door het JSON-antwoord en zoek je de media die aan elk bericht zijn gekoppeld. 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 helpfuncties in deze functie. Instagram stuurt een lijst met afbeelding "kandidaten" in het JSON-antwoord. Kies de grootste van deze afbeeldingen zodat het medium 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, als de link naar de afbeelding is gevonden, kunt u de afbeelding lokaal opslaan door de inhoud naar een bestand te schrijven. Het gebruik van de requests
maakt dit eenvoudig.
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 tweeten met Tweepy
Eerst moet u Twitter-toegang instellen met uw 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
Veel andere dingen kunnen worden gedaan met deze bibliotheek. Om deze walk-through af te get_images_from_hashtag
, kunt u de functie get_images_from_hashtag
van de eerder gemaakte Instagram-bot gebruiken om afbeeldingen en bijschriften te tweeten.
Bovendien kan je Twitter-bot Reddit zoeken naar nieuwe berichten en deze ook tweeten. Om beide functies samen te voegen, 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:\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
Uw door Python aangedreven social media-bot is klaar!
Dus nu heb je een heleboel code die media van de ene site haalt en op een andere plaatst. Je kunt ook mixen en matchen. Trek tweets en post naar Reddit. Verzamel Instagram-afbeeldingen voor plaatsing op subreddits. 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 uw eigen computer zijn met een tijdplanner. Of stof de oude Raspberry Pi af die in je kast is geweest en bekijk deze zoete Twitter-botprojecten voor de Pi 10 Beste Twitter Bot-projecten voor Raspberry Pi 10 Beste Twitter Bot-projecten voor Raspberry Pi Lees meer.
Ontdek meer over: Codeercursussen, Python, Social Media Bots.