Jak stavět roboty Twitter, Instagram a Reddit pomocí Pythonu

Jak stavět roboty Twitter, Instagram a Reddit pomocí Pythonu

Je rok 2019. Slyšeli jste o robotech. K dispozici jsou chatovací roboti, e -mailové roboty, roboti pro škrábání webu a roboti pro sociální média. Už jste vytvořili robota? Je to překvapivě snadné. Pravděpodobně proto jsou všude. Přijměte naše vládce robotů připojením se k jejich hodnosti.





V tomto článku vám ukážu, jak můžete využít Python k automatické interakci s vašimi účty Twitter, Reddit a Instagram.





Práce s Pythonem

Tato příručka používá jako zvolený jazyk Python. Snadné použití Pythonu převažuje nad všemi rychlostními nedostatky, které má ve srovnání s jinými jazyky. Python si můžete stáhnout téměř pro jakýkoli operační systém. Použití editor podle vašeho výběru .





Distribuce Pythonu jsou spojeny s nástrojem s názvem

Ovladač ps4 se nepřipojuje k ps4
pip

. V době psaní článku je k dispozici ke stažení přes 168 000 knihoven



pip

. Pro roboty, které dnes vytvoříte, jsou potřeba pouze tři.

Z příkazového řádku můžete nainstalovat potřebné knihovny pomocí těchto tří řádků.





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

Nyní budete moci tyto knihovny importovat podle potřeby.

Získání aplikačních klíčů a tajemství

Moudrý filozof kdysi řekl: „Tajemství, tajemství není zábava. Tajemství, tajemství někomu ubližují. ' S respektem, roboti potřebují tajemství. Dalším krokem při nastavení vašich robotů je umožnit jim přístup k API každého webu. K tomu budete potřebovat klíč aplikace nebo tajný klíč.





Když sbíráte klíče, tajemství, tokeny a další (zní to jako zábavná hra!), Vložte je všechny do jednoho souboru s názvem „credentials.py“. Tento soubor by vypadal nějak 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 = ''

Velmi důležitý návrh na ochranu osobních údajů: nezavádějte tomuto souboru žádnou kontrolu zdroje (např. Git). Nechcete, aby někdo jiný měl tyto klíče a tajemství. Říká se jim tajemství z nějakého důvodu.

Nastavení přístupu na Twitter

Podívejte se na náš průvodce nastavením robota Twitter pomocí Node.js, který vám ukáže, jak vytvořit aplikaci Twitter. Upozorňujeme, že ověření vašeho účtu na Twitteru bude nějakou dobu trvat a zajistíte, že nevytváříte spamový účet.

Po provedení těchto kroků zkopírujte klíč spotřebitele, tajný kód spotřebitele, přístupový token a tajný klíč přístupového tokenu do souboru credentials.py.

Nastavení přístupu Reddit

Získání ID a tajemství klienta Reddit je velmi podobné Twitteru. Budete muset zaregistrovat aplikaci jako Reddit User Agent. Poté byste měli do svého životopisu absolutně vložit „Reddit User Agent“.

Přihlásit se na vámi zvolený účet Reddit. Přejděte na stránka předvoleb aplikací a Klikněte na vytvořit další aplikaci . Pojmenujte svého uživatelského agenta něčím užitečným. Vyberte skript pro účely vaší aplikace. Adresu URL about můžete nechat prázdnou. Do pole pro přesměrování zadejte libovolnou adresu.

Po vás Stiskněte vytvořit aplikaci , zobrazí se následující obrazovka se seznamem vašich aplikací. Číslice pod názvem vaší aplikace představují ID klienta a tajný kód klienta je umístěn pod ním. Zkopírujte tyto hodnoty do souboru credentials.py.

Nastavení přístupu na Instagram

Přístup na Instagram se liší od Twitteru a Redditu. Místo registrace aplikace používáte své uživatelské jméno a heslo. Doporučuji vytvořit samostatný veřejný účet a použít tyto podrobnosti pro svého robota.

Přístup na Reddit s Praw

Použití prawu je dvoustupňový proces. Za prvé, nastavení přístupu je volání jedné funkce metody Reddit praw. Potom pomocí inicializovaného objektu prohledejte subreddit pomocí metody 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)

Změň

sub_name

proměnná pro získání příspěvků z různých subredditů. Namísto

new()

, jiné metody jako např

hot()

jsou k dispozici pro získání příspěvků.

Hledání hashtagů Instagramu prostřednictvím InstagramAPI

Prvním krokem při používání Instagram API je nastavení objektu s ID klienta a tajným klíčem. Přímo poté zavolejte metodu login () a dokončete nastavení.

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žívání API je o něco složitější než jeho protějšek Reddit. V tomto příkladu skript používá getHashtagFeed k získání velmi velkého objektu odpovědi JSON z Instagramu.

Při hledání odpovědi skript vyhledá text titulků a poté jej vytiskne na obrazovku, aby jej mohl zobrazit.

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)

Přidejte obrázky na sociální média

V budoucnu možná budete chtít, aby váš skript získal obrázky v tomto zdroji hashtag. Chcete -li to provést, projděte odpověď JSON a najděte média spojená s každým příspěvkem. Zde je implementace pro extrahování informací z odpovědi 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 této funkci jsou použity dvě pomocné funkce. Instagram v odpovědi JSON odešle seznam „kandidátů“ obrázků. Vyberte největší z těchto obrázků, aby se médium zobrazovalo v nejvyšším rozliš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é, jakmile je nalezen odkaz na obrázek, můžete obrázek uložit místně zapsáním obsahu do souboru. Za použití

requests

knihovna to dělá přímočarý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édia pomocí Tweepy

Nejprve budete muset nastavit přístup na Twitter pomocí svých tajemství a klíčů.

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)

Vytvoření generického retweetového robota se provádí v několika řádcích.

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 knihovnou lze dělat mnoho dalších věcí. K ukončení této procházky můžete použít

get_images_from_hashtag

funkce od bota Instagramu vytvořeného dříve k tweetování obrázků a titulků.

Kromě toho může váš robot na Twitteru vyhledávat na Redditu nové příspěvky a také je tweetovat. Spojení obou těchto funkcí dohromady vypadá 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 pro sociální média využívající Python je připraven!

Takže teď máte spoustu kódu, který stahuje média z jednoho webu a publikuje na jiný. Můžete také kombinovat. Vytáhněte tweety a přidejte příspěvek na Reddit. Sbírejte obrázky z Instagramu pro zveřejnění na subreddits. Vytvořte si robota a buďte součástí skutečného internetu.

A konečně, abyste tento proces plně zautomatizovali, budete chtít, aby vaši roboti běželi ve smyčce na serveru. Může to být na vašem počítači s časovým plánovačem. Nebo oprašte starý Raspberry Pi, který byl ve vaší skříni, a podívejte se na tyto sladké projekty botů pro Pi.

Podíl Podíl tweet E-mailem Zde je důvod, proč FBI vydala varování pro ransomware Hive

FBI vydala varování před obzvláště ošklivým kmenem ransomwaru. Zde je důvod, proč byste si měli dávat pozor zejména na ransomware Hive.

Číst dále
Související témata
  • Programování
  • Krajta
  • Roboti na sociálních médiích
  • Návody na kódování
O autorovi Tom Johnsen(3 publikované články)

Tom je softwarový inženýr z Floridy (výkřik na Floridu) s vášní pro psaní, univerzitní fotbal (go Gators!), CrossFit a Oxfordské čárky.

Více od Toma Johnsena

Přihlaste se k odběru našeho zpravodaje

Připojte se k našemu zpravodaji a získejte technické tipy, recenze, bezplatné elektronické knihy a exkluzivní nabídky!

Kliknutím sem se přihlásíte k odběru