Ako stavať roboty Twitter, Instagram a Reddit pomocou Pythonu

Ako stavať roboty Twitter, Instagram a Reddit pomocou Pythonu

Je rok 2019. Počuli ste už o robotoch. Existujú chatovací roboty, e -mailové roboty, roboty na škrabanie webu a roboty na sociálnych médiách. Už ste vytvorili robota? Je to prekvapivo ľahké. Pravdepodobne preto sú všade. Pripojte sa k ich hodnosti a zahrňte sa s našimi vládcami robotov.





V tomto článku vám ukážem, ako môžete využiť Python na automatickú interakciu s vašimi účtami Twitter, Reddit a Instagram.





Práca s Pythonom

Táto príručka používa ako zvolený jazyk Python. Výhody jednoduchosti použitia Pythonu prevažujú nad všetkými rýchlosťami, ktoré má v porovnaní s inými jazykmi. Python si môžete stiahnuť takmer pre každý operačný systém. Použite editor podľa vášho výberu .





Distribúcie Pythonu sú spojené s nástrojom s názvom

ako vidieť zmazané správy na fb
pip

. V čase písania článku je k dispozícii na stiahnutie viac ako 168 000 knižníc



pip

. Na roboty, ktoré dnes vytvoríte, sú potrebné iba tri.

Z príkazového riadku môžete nainštalovať potrebné knižnice pomocou týchto troch riadkov.





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

Teraz budete môcť tieto knižnice importovať podľa potreby.

Získanie aplikačných kľúčov a tajomstiev

Múdry filozof kedysi povedal: „Tajomstvá, tajomstvá nie sú zábava. Tajomstvá, tajomstvá niekomu ubližujú. ' S rešpektom potrebujú roboti tajomstvá. Ďalším krokom pri nastavovaní vašich robotov je umožniť im prístup k rozhraniu API každého webu. Na to budete potrebovať aplikačný kľúč alebo tajný kľúč.





Keď budete zbierať kľúče, tajomstvá, tokeny a ďalšie (znie to ako zábavná hra!), Dajte ich všetky do jedného súboru s názvom „credentials.py“. Tento súbor by vyzeral asi takto:

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

Veľmi dôležitý návrh na ochranu osobných údajov: nezaväzujte tomuto súboru žiadnu kontrolu zdroja (napr. Git). Nechcete, aby tieto kľúče a tajomstvá mal niekto iný. Z nejakého dôvodu sa im hovorí tajomstvo.

Nastavenie prístupu na Twitter

Pozrite sa na nášho sprievodcu nastavením robota Twitter pomocou Node.js, ktorý vám ukáže, ako vytvoriť aplikáciu Twitter. Všimnite si toho, že Twitteru bude nejaký čas trvať, kým overí váš účet a zaistí, že nevytvárate spamový účet.

Po vykonaní týchto krokov skopírujte kľúč spotrebiteľa, tajomstvo spotrebiteľa, prístupový token a tajomstvo prístupového tokenu do súboru credentials.py.

Nastavenie prístupu Reddit

Získanie vášho ID a tajomstva klienta Reddit je veľmi podobné službe Twitter. Budete musieť zaregistrovať aplikáciu ako užívateľský agent Reddit. Potom by ste mali do svojho životopisu absolútne zaradiť „Reddit User Agent“.

Prihlásiť sa na účet Reddit podľa vlastného výberu. Prejdite na stránka predvolieb aplikácií a Kliknite na položku vytvoriť ďalšiu aplikáciu . Pomenujte svojho používateľského agenta niečím užitočným. Vyberte skript na účely vašej aplikácie. Informácie o adrese URL môžu zostať prázdne. Do poľa pre presmerovanie zadajte ľubovoľnú adresu.

Po vás Stlačte vytvoriť aplikáciu , Zobrazí sa vám nasledujúca obrazovka so zoznamom vašich aplikácií. Číslice pod názvom vašej aplikácie predstavujú ID klienta a tajomstvo klienta sa nachádza pod ním. Skopírujte tieto hodnoty do súboru credentials.py.

Nastavenie prístupu na Instagram

Prístup na Instagram sa líši od služieb Twitter a Reddit. Namiesto registrácie aplikácie používate svoje používateľské meno a heslo. Navrhujem vytvoriť samostatný verejný účet a použiť tieto podrobnosti pre svojho robota.

Prístup k Redditu s Praw

Použitie prahu je dvojstupňový proces. Po prvé, nastavenie prístupu je volanie jednej funkcie metódy Reddit z praw. Potom pomocou inicializovaného objektu vyhľadajte subreddit pomocou metódy 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)

Zmeniť

sub_name

premenná na získanie príspevkov z rôznych subredditov. Namiesto

new()

, iné metódy ako napr

hot()

sú k dispozícii na získanie príspevkov.

Vyhľadávanie hashtagov na Instagrame prostredníctvom InstagramAPI

Prvým krokom pri používaní rozhrania API Instagram je nastavenie objektu s ID a tajným kódom klienta. Hneď potom dokončite nastavenie zavolaním metódy login ().

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

Používanie rozhrania API je o niečo komplikovanejšie ako jeho náprotivok Reddit. V tomto prípade skript používa getHashtagFeed na získanie veľmi veľkého objektu odpovede JSON z Instagramu.

Skript pri hľadaní odpovede hľadá text titulkov a potom ho vytlačí na obrazovku, aby ho mohol zobraziť.

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)

Pridajte obrázky na sociálne médiá

V budúcnosti budete možno chcieť, aby váš skript zobrazoval obrázky v tomto informačnom kanáli hashtag. Za týmto účelom preveďte odpoveď JSON a nájdite médiá priradené ku každému príspevku. Tu je implementácia na extrahovanie informácií z odpovede JSON:

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

V tejto funkcii sú použité dve pomocné funkcie. Instagram odošle zoznam obrázkových „kandidátov“ v odpovedi JSON. Vyberte najväčší z týchto obrázkov, aby sa médium zobrazovalo v najvyššom rozlíšení.

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

Za druhé, akonáhle nájdete odkaz na obrázok, môžete obrázok uložiť lokálne zapísaním obsahu do súboru. Pomocou

requests

knižnica to robí jednoduchým.

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

Tweetingujte médiá pomocou Tweepy

Najprv budete musieť nastaviť prístup na Twitter pomocou svojich tajomstiev a kľúčov.

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)

Vytvorenie generického retweetového robota sa robí v niekoľkých riadkoch.

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

S touto knižnicou sa dá robiť mnoho ďalších vecí. Na záver tejto prechádzky môžete použiť

get_images_from_hashtag

funkcia z robota Instagram vytvoreného predtým na tweetovanie obrázkov a titulkov.

Okrem toho môže váš robot na Twitteri vyhľadávať na Reddite nové príspevky a tiež ich tweetovať. Spojenie oboch týchto funkcií vyzerá takto:

# 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

Váš robot sociálnych médií poháňaný Pythonom je pripravený!

Takže teraz máte veľa kódu, ktorý sťahuje médiá z jedného webu a uverejňuje ho na inom. Môžete tiež kombinovať. Vytiahnite tweety a uverejnite príspevok na Reddite. Zbierajte obrázky z Instagramu na odosielanie na subreddity. Vytvorte si robota a buďte súčasťou skutočného internetu.

Nakoniec, aby ste tento proces úplne zautomatizovali, budete chcieť, aby vaši roboti bežali v slučke na serveri. Môže to byť na vašom vlastnom počítači s časovým plánovačom. Alebo oprášte starý Raspberry Pi, ktorý bol vo vašom šatníku, a pozrite sa na tieto sladké projekty twitterových robotov pre Pi.

zdieľam zdieľam Tweet E -mail Z tohto dôvodu FBI vydala upozornenie na úľový ransomware

FBI vydala varovanie pred obzvlášť škaredým kmeňom ransomwaru. Tu je dôvod, prečo si musíte dávať pozor predovšetkým na ransomware Hive.

Čítajte ďalej
Súvisiace témy
  • Programovanie
  • Python
  • Roboty na sociálnych sieťach
  • Návody na kódovanie
O autorovi Tom Johnsen(3 publikované články)

Tom je softvérový inžinier z Floridy (výkrik na Floridu) s vášňou pre písanie, školský futbal (choďte Gators!), CrossFit a Oxfordské čiarky.

Viac od Toma Johnsena

prihlásiť sa ku odberu noviniek

Pripojte sa k nášmu bulletinu a získajte technické tipy, recenzie, bezplatné elektronické knihy a exkluzívne ponuky!

Kliknutím sem sa prihlásite na odber