Kuinka rakentaa Twitter-, Instagram- ja Reddit -botteja Pythonin avulla

Kuinka rakentaa Twitter-, Instagram- ja Reddit -botteja Pythonin avulla

On vuosi 2019. Olet kuullut botista. On chat -robotteja, sähköpostirobotteja, web -kaapimisrobotteja ja sosiaalisen median robotteja. Oletko jo luonut botin? Se on yllättävän helppoa. Luultavasti siksi niitä on kaikkialla. Ota vastaan ​​bottiherrojamme liittymällä heidän arvoonsa.





Tässä artikkelissa näytän sinulle, kuinka voit hyödyntää Pythonia vuorovaikutuksessa Twitter-, Reddit- ja Instagram -tiliesi kanssa automaattisesti.





Työskentely Pythonin kanssa

Tämä läpikäynti käyttää Pythonia valitsemanaan kielenä. Pythonin helppokäyttöiset edut ovat suurempia kuin mahdolliset nopeusongelmat muihin kieliin verrattuna. Voit ladata Pythonin melkein mihin tahansa käyttöjärjestelmään. Käyttää valitsemasi editori .





Python -jakelut liittyvät apuohjelmaan nimeltä

jos hylkäät kaveripyynnön Facebookissa, voivatko he lisätä sinut uudelleen
pip

. Tätä kirjoitettaessa on ladattavissa yli 168 000 kirjastoa



pip

. Tänään luomiasi botteja varten tarvitaan vain kolme.

Komentoriviltä voit asentaa tarvittavat kirjastot käyttämällä näitä kolmea riviä.





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

Nyt voit tuoda nämä kirjastot tarvittaessa.

Sovellusavainten ja salaisuuksien hankkiminen

Viisas filosofi sanoi kerran: 'Salaisuudet, salaisuudet eivät ole hauskaa. Salaisuudet, salaisuudet satuttavat jotakuta. '' Kunnioittavasti botit tarvitsevat salaisuuksia. Seuraava askel robotteja määritettäessä on antaa niille pääsy kunkin sivuston sovellusliittymään. Tätä varten tarvitset sovellusavaimen tai salaisuuden.





Kun keräät avaimia, salaisuuksia, tunnuksia ja paljon muuta (kuulostaa hauskalta peliltä!), Laita ne kaikki yhteen tiedostoon nimeltä credentials.py. Tämä tiedosto näyttäisi suunnilleen tältä:

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

Erittäin tärkeä tietosuojaehdotus: älä käytä tätä tiedostoa minkään lähteen hallintaan (esim. Git). Et halua kenenkään muun saavan näitä avaimia ja salaisuuksia. Niitä kutsutaan salaisuuksiksi syystä.

Twitter -käyttöoikeuden määrittäminen

Tutustu oppaaseemme Twitter -botin määrittämiseksi Node.js -palvelun avulla, kuinka voit luoda Twitter -sovelluksesi. Huomaa, että Twitterissä kestää jonkin aikaa vahvistaa tilisi ja varmistaa, ettet luo roskapostitiliä.

Kopioi näiden vaiheiden jälkeen kuluttaja -avain, kuluttajasalaisuus, käyttöoikeustunnus ja käyttöoikeustunnuksen salaisuus credentials.py -tiedostoosi.

Reddit Accessin määrittäminen

Reddit -asiakastunnuksen ja salaisuuden saaminen on hyvin samanlainen kuin Twitter. Sinun on rekisteröitävä sovellus Reddit -käyttäjäagentiksi. Tämän jälkeen sinun pitäisi ehdottomasti laittaa Reddit User Agent ansioluetteloosi.

Kirjaudu sisään valitsemallesi Reddit -tilille. Siirry kohtaan sovellusten asetussivu ja Napsauta Luo toinen sovellus . Nimeä käyttäjäagenttisi hyödylliseksi. Valitse käsikirjoitus sovellustasi varten. Tietoja -URL -osoite voidaan jättää tyhjäksi. Kirjoita mikä tahansa uudelleenohjausruudun osoite.

Kun olet Paina Luo sovellus , seuraava näyttö esitetään sinulle luettelo sovelluksistasi. Sovelluksesi nimen alla olevat numerot edustavat asiakastunnusta ja asiakkaan salaisuus sijaitsee sen alapuolella. Kopioi nämä arvot credentials.py -tiedostoosi.

Instagram -käyttöoikeuden määrittäminen

Instagram -käyttöoikeus eroaa Twitteristä ja Redditistä. Sovelluksen rekisteröinnin sijaan käytät käyttäjätunnustasi ja salasanaasi. Ehdotan, että luot erillisen julkisen tilin ja käytät näitä tietoja botillesi.

Redditin käyttäminen Prawilla

Praw: n käyttö on kaksivaiheinen prosessi. Ensinnäkin pääsyn määrittäminen on yksi funktion kutsu Reddit praw -menetelmään. Sitten alustusobjektin avulla alihakemisto etsitään käyttämällä uutta () -menetelmää.

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)

Muuta

sub_name

muuttuja, jos haluat saada viestejä eri subredditeistä. Sijasta

new()

, muita menetelmiä, kuten

hot()

ovat saatavilla saadaksesi viestejä.

Haku Instagram -hashtageista InstagramAPI: n kautta

Ensimmäinen vaihe Instagram -sovellusliittymän käytössä on objektin määrittäminen asiakastunnuksella ja salaisuudella. Välittömästi sen jälkeen soita login () -menetelmä loppuun.

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

API: n käyttö on hieman monimutkaisempaa kuin sen Reddit -vastine. Tässä esimerkissä komentosarja käyttää getHashtagFeedia saadakseen erittäin suuren JSON -vastausobjektin Instagramista.

Kun etsit vastausta, käsikirjoitus etsii kuvatekstiä ja tulostaa sitten näytölle sen tarkastelua varten.

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)

Lisää kuvia sosiaaliseen mediaan

Jatkaessasi haluat ehkä, että käsikirjoituksesi saa kuvat tähän hashtag -syötteeseen. Voit tehdä tämän kiertämällä JSON -vastauksen läpi ja etsimällä jokaiseen viestiin liittyvän median. Tässä on toteutus tietojen poimimiseksi JSON -vastauksesta:

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

Tässä toiminnossa käytetään kahta aputoimintoa. Instagram lähettää luettelon kuva -ehdokkaista JSON -vastauksessa. Valitse näistä kuvista suurin, jotta media näytetään suurimmalla resoluutiolla.

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

Toiseksi, kun linkki kuvaan on löydetty, voit tallentaa kuvan paikallisesti kirjoittamalla sisällön tiedostoon. Käyttämällä

requests

kirjasto tekee tästä yksinkertaisen.

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

Median twiittaaminen Tweepyn avulla

Ensin sinun on määritettävä Twitter -käyttö salaisuuksillasi ja avaimillasi.

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)

Yleisen uudelleentwiittausbotin luominen tapahtuu vain muutamalla rivillä.

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

Tällä kirjastolla voi tehdä monia muita asioita. Voit lopettaa tämän läpikäynnin käyttämällä

get_images_from_hashtag

toiminto aiemmin Instagram -botista, jotta voit tweetata kuvia ja kuvatekstejä.

Lisäksi Twitter -robotti voi etsiä Redditistä uusia viestejä ja twiittaa myös ne. Molempien toimintojen yhdistäminen näyttää tältä:

# 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

Python-käyttöinen sosiaalisen median robotti on valmis!

Joten nyt sinulla on joukko koodia, joka vetää mediaa yhdeltä sivustolta ja lähettää viestejä toiselle. Voit myös sekoittaa ja yhdistää. Vedä twiitit ja lähetä Redditiin. Kerää Instagram -kuvia, jotta voit lähettää ne subredditsiin. Tee robotti ja ole osa todellista Internetiä.

Lopuksi, jotta voit automatisoida tämän prosessin kokonaan, haluat, että botit toimivat silmukassa palvelimella. Tämä voi tapahtua omalla tietokoneellasi, jossa on ajastin. Tai pyyhi pöly pois vanhasta Raspberry Pi: stä, joka on ollut kaapissasi, ja tutustu näihin makeisiin Twitter -bottiprojekteihin Pi: lle.

Jaa Jaa Tweet Sähköposti Tästä syystä FBI antoi varoituksen Hive Ransomware -ohjelmasta

FBI antoi varoituksen erityisen ikävästä ransomware -kannasta. Tästä syystä sinun on oltava erityisen varovainen Hive -lunnasohjelmista.

Lue seuraava
Liittyvät aiheet
  • Ohjelmointi
  • Python
  • Sosiaalisen median robotit
  • Koodausoppaat
Kirjailijasta Tom Johnsen(3 artikkelia julkaistu)

Tom on ohjelmistosuunnittelija Floridasta (huutaa Floridan miehelle), jolla on intohimo kirjoittamiseen, college-jalkapalloon (go Gators!), CrossFit ja Oxford-pilkut.

Lisää Tom Johnsenilta

tilaa uutiskirjeemme

Liity uutiskirjeeseemme saadaksesi teknisiä vinkkejä, arvosteluja, ilmaisia ​​e -kirjoja ja ainutlaatuisia tarjouksia!

Klikkaa tästä tilataksesi