Рубрики
Без рубрики

Нужен друг? Напишите бот Reddit с Python, чтобы следовать за вами 🤖

Мы будем использовать Python для взаимодействия с API Reddit, создавая расширяемый бот, который отвечает на конкретные фразы. Tagged с учебником, Python, Beginters, WebDev.

Мы собираемся написать бот Reddit, который прослушивает конкретные фразы и отвечает на комментарии, которые их содержат. Мы узнаем, как можно взаимодействовать с API Reddit в Python, создавая собственного приятеля -бота.

Bottiquette

Вы, наверное, слышали о Три закона робототехники Но вы слышали о Reddit’s Bottiquette ? Это список правил, которые помогут вам создать вежливого бота, который никому не попадет. Самое важное правило – не выдавать себя за человека с вашим ботом. В то время как это нормально, чтобы бросить вверх и вниз, команда для этого должна исходить непосредственно от человека.

Настраивать

Вам понадобится Доход , Python Reddit API обертка Анкет Установите этот пакет с: PIP Установите PROU Анкет Он получил обширную документацию, и есть также r/redditdev subreddit, если вам понадобится больше вдохновения или помощи.

Создать Скрипт Reddit App и отметьте идентификатор клиента и секрет клиента.

Убедитесь, что вы не посвящаете их репозиторию! С Python вы можете получить доступ к переменным окружающей среды с Os.environ , картирующий объект. Ниже приводится приложение Hello World Praw. Поскольку наш бот будет выполнять действия учетной записи, нам также понадобятся имя пользователя и пароль учетной записи. С пассивными ботами это не нужно. Есть также Другие способы аутентификации Анкет

# Setting environment variables on different platforms:
Linux/OS X  - export ENV_VAR='data'
Windows Cmd - ENV_VAR='data'
Powershell  - $env:ENV_VAR='data' 
import os
import praw

# a reddit instance
reddit = praw.Reddit(client_id=os.environ['CLIENTID'],
                     client_secret=os.environ['CLIENTSECRET'],
                     user_agent='Reddit bot tutorial v0.1-1',
                     username=os.environ['CLIENTUSER'],
                     password=os.environ['CLIENTPASS'])

# with incorrect authentication information, this will error with:
#   prawcore.exceptions.OAuthException: invalid_grant error processing request
print(reddit.user.me())

Поскольку наша конфиденциальная информация определена в другом месте, мы можем совершить это без утечки каких -либо деталей. Также легче проверить, и позвольте другим разработчикам более легко работать с этим кодом.

Все комментарии

Это весело сделать. Мой вызов вам: попробуйте прочитать каждый комментарий, как он опубликован в Reddit. Это действительно дает вам представление о шкале доступных данных.

# with our reddit instance, get an endless stream of comments
for comment in reddit.subreddit('all').stream.comments():
    print(comment.body)

Здесь, Комментарии это функция генератора, которая дает новые комментарии по мере того, как они становятся доступными. Как и в большинстве API, существуют ограничения с API Reddit. К счастью для нас, PRAW управляет этим на заднем плане для нас и контролирует нас.

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

import argparse

# setup argparse
parser = argparse.ArgumentParser(description='Reply to certain Reddit comments')
parser.add_argument('--search', dest='search',
                    help='Search for these comma-delimited phrases. E.g., "one phrase, another phrase"')
args = parser.parse_args()

# split by commas, strip extra white space
search = [phrase.strip() for phrase in args.search.split(',')]

# python args.py --search "test phrase, two, three"
# prints: ['test phrase', 'one', 'two']
print(search)

Отвечая на комментарии

Reddit’s r/test это хорошее поле битвы, чтобы попробовать это. Мы будем использовать Комментарий#Ответ Анкет Поскольку мы будем искать тела комментариев для наших фраз, у нас уже будет ссылка на объект комментария, и мы можем просто использовать его Ответ метод В противном случае вы можете найти объект комментария с помощью я бы.

# with a comment reference
comment.reply('hello! signed, a bot.')

# find a comment by id
comment = reddit.comment(id='dxolpyc')
comment.reply('hi again!')

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

Где мы до сих пор

Давайте проверим, как наш бот формирует. Вы увидите, что я использовал Argparse для обзора поисковых фраз. Мы делаем настраиваемый бот, а не жесткий кодирование, с которым труднее расширить и работать в будущем.

import os
import praw
import argparse

# setup argparse
parser = argparse.ArgumentParser(description='Reply to certain Reddit comments')
parser.add_argument('--search', dest='search',
                    help='Search for these comma-delimited phrases. E.g., "one phrase, another phrase"')
parser.add_argument('--reply', dest='reply',
                    help='Reply to target comments with this phrase')
args = parser.parse_args()

# our search phrases, also works with a single word
search = [phrase.strip() for phrase in args.search.split(',')]
# our reply
reply = args.reply

# reddit instance
reddit = praw.Reddit(client_id=os.environ['CLIENTID'],
                     client_secret=os.environ['CLIENTSECRET'],
                     user_agent='Reddit bot tutorial v0.1-1',
                     username=os.environ['CLIENTUSER'],
                     password=os.environ['CLIENTPASS'])

# an endless stream of comments
for comment in reddit.subreddit('all').stream.comments():
    for phrase in search:
        if phrase in comment.body:
            comment.reply(reply)
            # for debugging
            print(f'Replied to {comment.id}!')
            break

Куда пойти отсюда

  • Клон Учебный репозиторий И взломай!
  • Получите имя плаката и используйте его в своем ответе: comment.author.name
  • Размещайте своего бота на малиновом PI или в облаке с Хероку Анкет
  • Подключите своего бота с сервисом бэкэнд, как я сделал с моим Emojistreamer Project, который транслирует каждый эмодзи, размещенный в Reddit.

Более

Я недавно стал наставником в Кодирующий тренер . Если вы разрабатываете бот Reddit или нуждаетесь в помощи Dev в целом, я могу помочь!

Присоединяйтесь к 150+ человек, подписавшись на мой Информационный бюллетень О программировании и личностном росте!

Я пишу в Твиттере о технологии @Healeycodes Анкет

Оригинал: “https://dev.to/healeycodes/need-a-friend-write-a-reddit-bot-with-python-to-follow-you-around–2dkl”