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

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

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

Работа с Python

Этот прогон использует Python в качестве языка выбора

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

Дистрибутивы Python связаны с утилитой под названием зернышко. На момент написания статьи для скачивания доступно более 168 000 библиотек. зернышко. Для ботов, которых вы создадите сегодня, нужны только три.

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

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 о может быть оставлен пустым. Введите любой адрес для поля перенаправления.

Reddit App Bot Python

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

Reddit App API Secret Python

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

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

Доступ к Reddit с Praw

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

Поиск в хэштегах 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

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

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

Tweeting Out СМИ с Tweepy

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

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 функция от бота Instagram, сделанная ранее, чтобы чирикать изображения и подписи.

Кроме того, ваш бот-Твиттер может искать в 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:\n\n{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 изображения для публикации в subreddits. Сделайте бот и станьте частью настоящего интернета.

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

,

Ссылка на основную публикацию
Adblock
detector