Как создать ботов для Twitter, Instagram и Reddit с помощью Python

Как создать ботов для Twitter, Instagram и Reddit с помощью Python

Это 2019 год. Вы слышали о ботах. Существуют чат-боты, боты для электронной почты, боты для очистки веб-страниц и боты для социальных сетей. Вы уже создали бота? Это на удивление просто. Наверное, поэтому они повсюду. Примите наших ботов-повелителей, присоединившись к их званию.





В этой статье я покажу вам, как вы можете использовать Python для автоматического взаимодействия с вашими учетными записями Twitter, Reddit и Instagram.





Работа с Python

В этом пошаговом руководстве в качестве языка выбора используется Python. Преимущества простоты использования Python перевешивают любые недостатки скорости, которые он имеет по сравнению с другими языками. Вы можете скачать Python практически для любой ОС. Использовать редактор по вашему выбору .





Дистрибутивы Python связаны с утилитой под названием

какая кнопка wps на моем роутере
pip

. На момент написания было доступно более 168 000 библиотек для загрузки с использованием



pip

. Для ботов, которых вы создадите сегодня, нужно всего три.

Из командной строки вы можете установить необходимые библиотеки, используя эти три строки.





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

Теперь вы сможете импортировать эти библиотеки, где это необходимо.

Получение ключей и секретов приложения

Один мудрый философ однажды сказал: «Секреты, секреты - это не весело. Секреты, секреты кому-то больно ». С уважением, ботам нужны секреты. Следующим шагом в настройке ваших ботов является предоставление им доступа к API каждого сайта. Для этого вам понадобится ключ приложения или секрет.





Собирая ключи, секреты, жетоны и многое другое (звучит как забавная игра!), Помещайте их все в один файл с именем credentials.py. Этот файл будет выглядеть примерно так:

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

Очень важное предложение о конфиденциальности: не фиксируйте этот файл в каком-либо источнике (например, Git). Вы же не хотите, чтобы эти ключи и секреты были у кого-то еще. Их неспроста называют секретами.

Настройка доступа к Twitter

Ознакомьтесь с нашим руководством по настройке бота Twitter с помощью Node.js, которое покажет вам, как создать приложение Twitter. Обратите внимание, что Twitter потребуется некоторое время, чтобы подтвердить вашу учетную запись и убедиться, что вы не создаете учетную запись для спама.

После выполнения этих шагов скопируйте ключ потребителя, секрет потребителя, токен доступа и секрет токена доступа в файл credentials.py.

Настройка доступа к Reddit

Получение вашего идентификатора клиента Reddit и секрета очень похоже на Twitter. Вам нужно будет зарегистрировать приложение как пользовательский агент Reddit. После этого вы обязательно должны добавить в свое резюме «Reddit User Agent».

Войти в выбранную вами учетную запись Reddit. Перейдите к страница настроек приложений а также Нажмите создать другое приложение . Назовите своему пользовательскому агенту что-нибудь полезное. Выбрать сценарий для вашего приложения. URL-адрес about можно оставить пустым. Заполните любой адрес для поля перенаправления.

После тебя Нажмите создать приложение , вам будет представлен следующий экран со списком ваших приложений. Цифры под названием вашего приложения представляют собой идентификатор клиента, а секрет клиента находится под ним. Скопируйте эти значения в свой файл credentials.py.

Настройка доступа к Instagram

Доступ к Instagram отличается от Twitter и Reddit. Вместо регистрации приложения вы используете свое имя пользователя и пароль. Я предлагаю создать отдельную публичную учетную запись и использовать эти данные для вашего бота.

Доступ к Reddit с Praw

Использование креветки - это двухэтапный процесс. Во-первых, настройка доступа - это один вызов функции метода praw Reddit. Затем с использованием инициализированного объекта поиск в субреддите выполняется с помощью метода 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)

Изменить

sub_name

переменная для получения сообщений из разных субреддитов. Вместо того

new()

, другие методы, такие как

hot()

доступны для получения сообщений.

Поиск по хештегам Instagram через InstagramAPI

Первым шагом в использовании Instagram API является настройка объекта с идентификатором клиента и секретом. Сразу после этого вызовите метод 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()

Использование API немного сложнее, чем его аналог Reddit. В этом примере скрипт использует getHashtagFeed для получения очень большого объекта ответа JSON от Instagram.

Выполняя поиск в ответе, сценарий ищет текст заголовка, а затем выводит его на экран для просмотра.

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)

Добавить изображения в социальные сети

В дальнейшем вы можете захотеть, чтобы ваш скрипт получал изображения в этом фиде хэштегов. Для этого прокрутите ответ JSON и найдите носитель, связанный с каждым сообщением. Вот реализация для извлечения информации из ответа 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

В этой функции используются две вспомогательные функции. Instagram отправляет список «кандидатов» изображений в ответе JSON. Выберите самое большое из этих изображений, чтобы мультимедиа отображалась с максимальным разрешением.

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

Во-вторых, как только ссылка на изображение будет найдена, вы можете сохранить изображение локально, записав содержимое в файл. С помощью

requests

библиотека делает это простым.

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

Твитнуть СМИ с Tweepy

Во-первых, вам нужно настроить доступ к Twitter, используя свои секреты и ключи.

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)

Создание универсального ретвит-бота занимает всего несколько строк.

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

С помощью этой библиотеки можно делать многое другое. Чтобы завершить это пошаговое руководство, вы можете использовать

get_images_from_hashtag

ранее созданная функция инстаграм-бота для размещения изображений и подписей в Твиттере.

Кроме того, ваш бот Twitter может искать в Reddit новые сообщения и публиковать их в Твиттере. Объединение обеих функций вместе выглядит так:

# 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 готов!

Итак, теперь у вас есть набор кода, который извлекает медиафайлы с одного сайта и публикует их на другом. Вы также можете смешивать и сочетать. Создавайте твиты и публикуйте сообщения на Reddit. Собирайте изображения из Instagram для публикации в сабреддитах. Сделайте бота и станьте частью настоящего Интернета.

Наконец, чтобы полностью автоматизировать этот процесс, вам нужно, чтобы ваши боты работали в цикле на сервере. Это может быть ваш компьютер с планировщиком времени. Или удалите пыль со старого Raspberry Pi, который был у вас в шкафу, и посмотрите эти милые проекты ботов Twitter для Pi.

Делиться Делиться Твитнуть Эл. адрес Вот почему ФБР выпустило предупреждение о вирусах-вымогателях Hive

ФБР вынесло предупреждение об особо опасном штамме программ-вымогателей. Вот почему вам нужно особенно опасаться программ-вымогателей Hive.

Читать далее
Похожие темы
  • Программирование
  • Python
  • Боты для социальных сетей
  • Учебники по кодированию
Об авторе Том Джонсен(Опубликовано 3 статьи)

Том - инженер-программист из Флориды (привет Флориде) со страстью к письму, студенческому футболу (давай, Gators!), Кроссфиту и Оксфордским запятым.

Ещё от Tom Johnsen

Подписывайтесь на нашу новостную рассылку

Подпишитесь на нашу рассылку, чтобы получать технические советы, обзоры, бесплатные электронные книги и эксклюзивные предложения!

Нажмите здесь, чтобы подписаться