Kaip sukurti „Twitter“, „Instagram“ ir „Reddit“ robotus naudojant „Python“

Kaip sukurti „Twitter“, „Instagram“ ir „Reddit“ robotus naudojant „Python“

Tai 2019 metai. Jūs girdėjote apie robotus. Yra pokalbių robotai, el. Pašto robotai, žiniatinklio grandymo robotai ir socialinės žiniasklaidos robotai. Ar jau sukūrėte robotą? Tai stebėtinai lengva. Tikriausiai todėl jie visur. Prisijunkite prie mūsų robotų viršininkų prisijungdami prie jų rango.





Šiame straipsnyje aš jums parodysiu, kaip galite panaudoti „Python“, kad jis automatiškai sąveikautų su „Twitter“, „Reddit“ ir „Instagram“ paskyromis.





Darbas su Python

Ši apžvalga naudoja „Python“ kaip pasirinktą kalbą. „Python“ naudojimo paprastumo pranašumai yra didesni už visus greičio trūkumus, palyginti su kitomis kalbomis. Python galite atsisiųsti beveik bet kuriai OS. Naudoti jūsų pasirinktas redaktorius .



„Python“ paskirstymai yra susieti su programa, vadinama

ps4 valdiklis neprisijungia prie ps4
pip

. Rašymo metu yra daugiau nei 168 000 bibliotekų, kurias galima atsisiųsti naudojant



pip

. Šiandien sukurtiems robotams reikia tik trijų.

Iš komandinės eilutės galite įdiegti reikalingas bibliotekas naudodami šias tris eilutes.





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

Dabar galėsite importuoti šias bibliotekas ten, kur reikia.

Programų raktų ir paslapčių gavimas

Išmintingas filosofas kartą pasakė: „Paslaptys, paslaptys nėra smagu. Paslaptys, paslaptys ką nors įskaudina “. Pagarbiai, robotams reikia paslapčių. Kitas žingsnis nustatant robotus yra leisti jiems pasiekti kiekvienos svetainės API. Norėdami tai padaryti, jums reikės programos rakto arba paslapties.





Rinkdami raktus, paslaptis, žetonus ir dar daugiau (skamba kaip įdomus žaidimas!), Sudėkite juos į vieną failą, vadinamą „credentials.py“. Šis failas atrodytų maždaug taip:

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

Labai svarbus privatumo pasiūlymas: neįpareigokite šio failo valdyti jokiu šaltiniu (pvz., „Git“). Jūs nenorite, kad kas nors kitas turėtų šiuos raktus ir paslaptis. Jie ne veltui vadinami paslaptimis.

„Twitter“ prieigos nustatymas

Peržiūrėkite mūsų vadovą, kaip nustatyti „Twitter“ robotą naudojant „Node.js“, bus parodyta, kaip sukurti „Twitter“ programą. Atminkite, kad „Twitter“ užtruks šiek tiek laiko, kad patvirtintų jūsų paskyrą ir įsitikintų, kad nesukuriate šlamšto paskyros.

Atlikę šiuos veiksmus, nukopijuokite vartotojo raktą, vartotojo paslaptį, prieigos raktą ir prieigos rakto paslaptį į savo credentials.py failą.

„Reddit“ prieigos nustatymas

„Reddit“ kliento ID ir paslapties gavimas yra labai panašus į „Twitter“. Turėsite užregistruoti programą kaip „Reddit“ vartotojo agentą. Tai atlikę, turėtumėte visiškai įtraukti „Reddit User Agent“ į savo gyvenimo aprašymą.

Prisijungti į jūsų pasirinktą „Reddit“ paskyrą. Eikite į programų nuostatų puslapis ir Spustelėkite sukurti kitą programą . Pavadinkite naudotojo agentą kažkuo naudingu. Pasirinkite scenarijų jūsų programos tikslais. Apie URL gali būti paliktas tuščias. Užpildykite bet kurį peradresavimo laukelio adresą.

Po jūsų Paspauskite „Sukurti programą“ , toliau pateiktas ekranas bus pateiktas su jūsų programų sąrašu. Skaičiai po jūsų programos pavadinimu reiškia kliento ID, o kliento paslaptis yra žemiau. Nukopijuokite šias vertes į savo credentials.py failą.

„Instagram“ prieigos nustatymas

„Instagram“ prieiga skiriasi nuo „Twitter“ ir „Reddit“. Užuot registravę programą, naudojate savo vartotojo vardą ir slaptažodį. Siūlau sukurti atskirą viešą paskyrą ir naudoti šią informaciją savo robotui.

Prieiga prie „Reddit“ naudojant „Praw“

Praw naudojimas yra dviejų etapų procesas. Pirma, prieigos nustatymas yra vienos funkcijos iškvietimas naudojant „Reddit“ metodą. Tada, naudojant inicializuotą objektą, subreddit paieška atliekama naudojant naują () metodą.

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)

Pakeisti

sub_name

kintamasis, kad gautumėte pranešimus iš skirtingų subredditų. Vietoj

new()

, kiti metodai, tokie kaip

hot()

galima gauti pranešimų.

„Instagram“ hashtagų paieška per „InstagramAPI“

Pirmasis žingsnis naudojant „Instagram“ API yra objekto su kliento ID ir paslaptimi nustatymas. Iškart po to paskambinkite prisijungimo () metodu, kad užbaigtumėte sąranką.

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 naudojimas yra šiek tiek sudėtingesnis nei jo „Reddit“ atitikmuo. Šiame pavyzdyje scenarijus naudoja getHashtagFeed, kad gautų labai didelį JSON atsakymo objektą iš „Instagram“.

Ieškodamas atsakymo, scenarijus ieško antraščių teksto ir išspausdinamas ekrane, kad jį būtų galima peržiūrėti.

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)

Pridėkite vaizdų prie socialinės žiniasklaidos

Žengdami į priekį, galbūt norėsite, kad jūsų scenarijus gautų vaizdus šiame hashtag sklaidos kanale. Norėdami tai padaryti, peržiūrėkite JSON atsakymą ir raskite su kiekvienu įrašu susietą laikmeną. Štai kaip išgauti informaciją iš JSON atsakymo:

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

Šioje funkcijoje naudojamos dvi pagalbinės funkcijos. „Instagram“ JSON atsakyme siunčia vaizdų „kandidatų“ sąrašą. Pasirinkite didžiausią iš šių vaizdų, kad laikmena būtų rodoma didžiausia raiška.

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

Antra, radus nuorodą į vaizdą, galite išsaugoti vaizdą vietoje, įrašydami turinį į failą. Naudojant

requests

biblioteka tai daro nesudėtingai.

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

Žiniasklaidos tweeting su Tweepy

Pirma, turėsite nustatyti „Twitter“ prieigą naudodami savo paslaptis ir raktus.

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)

Bendras retweet robotas sukuriamas tik keliomis eilutėmis.

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

Su šia biblioteka galima nuveikti daug kitų dalykų. Norėdami užbaigti šią apžvalgą, galite naudoti

get_images_from_hashtag

funkcija iš „Instagram“ roboto, sukurto anksčiau, kad išspausdintų vaizdus ir antraštes.

Be to, jūsų „Twitter“ robotas gali ieškoti „Reddit“ naujų įrašų ir taip pat paskelbti „Twitter“. Sujungti abi šias funkcijas atrodo taip:

# 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

Jūsų „Python“ palaikomas socialinės žiniasklaidos robotas yra paruoštas!

Taigi, dabar turite daugybę kodų, kurie traukia žiniasklaidą iš vienos svetainės ir skelbia į kitą. Taip pat galite maišyti ir derinti. Patraukite „tweets“ ir paskelbkite „Reddit“. Surinkite „Instagram“ vaizdus, ​​kad paskelbtumėte subreddits. Sukurkite robotą ir tapkite tikro interneto dalimi.

Galiausiai, norėdami visiškai automatizuoti šį procesą, norėsite, kad jūsų robotai veiktų cikle serveryje. Tai gali būti jūsų kompiuteryje su laiko planavimo priemone. Arba nuvalykite dulkes nuo seno „Raspberry Pi“, kuris buvo jūsų spintoje, ir peržiūrėkite šiuos saldžius „Twitter“ robotų projektus, skirtus „Pi“.

Dalintis Dalintis „Tweet“ Paštu Štai kodėl FTB paskelbė įspėjimą dėl „Hive Ransomware“

FTB paskelbė įspėjimą apie ypač bjaurią išpirkos programinę įrangą. Štai kodėl turite būti ypač atsargūs dėl „Hive“ išpirkos programos.

Skaityti toliau
Susijusios temos
  • Programavimas
  • Python
  • Socialinės žiniasklaidos robotai
  • Kodavimo pamokos
Apie autorių Tomas Johnsenas(Paskelbti 3 straipsniai)

Tomas yra programinės įrangos inžinierius iš Floridos (šaukitės Floridos žmogui), mėgstantis rašyti, koledžo futbolą (eiti į Gators!), „CrossFit“ ir Oksfordo kablelius.

Daugiau iš Tomo Johnseno

Prenumeruokite mūsų naujienlaiškį

Prisijunkite prie mūsų naujienlaiškio, kad gautumėte techninių patarimų, apžvalgų, nemokamų el. Knygų ir išskirtinių pasiūlymų!

Norėdami užsiprenumeruoti, spustelėkite čia