(Или ползать по Reddit в поисках блокнотов Colab)

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

Трудно найти контент, который вам нравится, среди такой горы информации. Как кто-то, кто очень интересуется ИИ, я хотел посмотреть на новые блокноты Google Colab на сабреддите r/MachineLearning. Но ручное усилие, необходимое для просмотра постов, отличных от кошачьего видео-реддита, слишком велико.

Кто-то однажды сказал мне за чашечкой обычного кофе: «Если что-то стоит делать, стоит написать программу для этого». С этим избитым советом я поискал в Интернете решение, требующее переосмысления. Решение, которое я в конце концов выбрал, — создать своего собственного бота для Reddit, чтобы курировать ваш контент на Reddit.

"Если так будет продолжаться, у человека атрофируются все конечности, кроме кнопочного пальца".
– Фрэнк Ллойд Райт, архитектор

Давайте углубимся в мельчайшие детали. Перед этим назовем нашего бота brevity_bot. 🤖

Огромное спасибо этой статье: https://new.pythonforengineers.com/blog/build-a-reddit-bot-part-1/, это помогло мне создать модифицированное решение для анализа сообщений с помощью Google Colab.

Предпосылки

Мы будем использовать PRAW: The Python Reddit API Wrapper на python, чтобы легко общаться с Reddit из нашей программы.

Сначала давайте создадим новый каталог для программы, используя терминал/командную строку.

mkdir brevity_bot
cd brevity_bot

Установка и настройка praw

Установка проста через `pip`

pip install praw

После установки вам необходимо создать файл `praw.ini` в вашем локальном каталоге. Этот файл `praw.ini` используется для установки конфигураций, чтобы praw мог взаимодействовать с вашей учетной записью Reddit. Код ниже создаст ini-файл с пустой строкой в ​​файле windows.

echo.> praw.ini

люди, работающие в Linux-системах, могут использовать сенсорную команду.

touch praw.ini

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

[DEFAULT]
# A boolean to indicate whether or not to check for package updates.
check_for_updates=True
# Object to kind mappings
comment_kind=t1
message_kind=t4
redditor_kind=t2
submission_kind=t3
subreddit_kind=t5
trophy_kind=t6
# The URL prefix for OAuth-related requests.
oauth_url=https://oauth.reddit.com
# The amount of seconds of ratelimit to sleep for upon encountering a specific type of 429 error.
ratelimit_seconds=5
# The URL prefix for regular requests.
reddit_url=https://www.reddit.com
# The URL prefix for short URLs.
short_url=https://redd.it
# The timeout for requests to Reddit in number of seconds
timeout=16
[brevity_bot]
client_id=
client_secret=
password=
username=
user_agent=PyEng Bot 0.1
view raw gistfile1.txt hosted with ❤ by GitHub

если вы посмотрите на последний раздел файла, вы найдете блок `[brevity_bot]`. краткость bot — это имя нашего бота. Ниже вы увидите такие поля, как `client_id` и `client_secret`. Для получения этих значений вам необходимо зарегистрировать приложение на странице разработчика Reddit.

Регистрация вашего приложения на Reddit для разработки

  1. перейдите на https://reddit.com/prefs/apps.
  2. нажмите «Создать приложение» внизу страницы.
  3. используйте переключатель скрипта, чтобы обозначить, что вы хотите запустить скрипт

4. Вы получите секрет и идентификатор для своего приложения. Поместите эти значения и учетные данные в файл praw.ini.

5. Чтобы ваш бот мог взаимодействовать с Reddit (например, отвечать), вам нужно также указать praw.ini свое имя пользователя Reddit и пароль.

Создание субреддита Reddit для тестирования (необязательно)

Чтобы вы могли спокойно протестировать своего бота без блокировки Reddit, настоятельно рекомендуется создать свой собственный саббреддит на Reddit.

Однако, если вы просто следуете руководству, то я уже создал сабреддит по адресу https://reddit.com/r/botjungle/. В приведенном ниже коде используется этот субреддит.

Кодирование фактической программы в python

Давайте создадим файл python для программы. На окнах-

echo.> brevity_bot.py

снова в Linux (`touch brevity_bot.py`)

Введите следующий код в brevity_bot.py

## importing all the required libraries
import praw
import os
import re
## initialising praw
reddit = praw.Reddit('brevity_bot')
subreddit = reddit.subreddit("botjungle")
## creating a file posts_replied_to.txt to check what are the posts your bot has replied to
if not os.path.isfile("posts_replied_to.txt"):
posts_replied_to = []
else:
with open("posts_replied_to.txt", "r") as f:
posts_replied_to = f.read()
posts_replied_to = posts_replied_to.split("\n")
posts_replied_to = list(filter(None, posts_replied_to))
## to iterate ove the subbredit post and then reply on selected posts
for submission in subreddit.hot(limit=5):
if submission.id not in posts_replied_to:
if re.search("colab.research.google.com", submission.selftext, re.IGNORECASE) or re.search("google-colab.com", submission.selftext, re.IGNORECASE):
submission.reply("jupter_bot: Thank you for sharing this Notebook.")
print("Bot replying to : ", submission.title)
posts_replied_to.append(submission.id)
## writing posts already replied to in a text file posts_replied_to.txt
with open("posts_replied_to.txt", "w") as f:
for post_id in posts_replied_to:
f.write(post_id + "\n")
  1. Первый шаг — импорт всех библиотек — praw, os (для файловых операций), re (для сопоставления регулярных выражений).
  2. Мы инициализируем praw именем бота. Имя бота совпадает с тем, которое вы указали в praw.ini. Subreddit — это субреддит, в который пойдет бот.
  3. Наш бот будет просматривать топ-5 новых постов саббреддита. Это делается путем повторения `subbreddit.hot(limit=5)`. Этот лимит говорит о том, сколько постов он будет просматривать. Будьте осторожны, чтобы не увеличить его слишком сильно. При просмотре сообщений нам нужно убедиться, что бот не отвечает на одни и те же сообщения снова и снова. Поэтому мы создали posts_replied_to.txt, чтобы отслеживать все сообщения, на которые уже ответили.
  4. Как только мы находим определенный текст в сообщении, мы используем `submission.reply` для ответа.

Нашим следующим шагом должно быть сохранение содержимого этих сообщений где-нибудь. Код для сохранения поста и полной проверки кода -



Заключение

Вот и все! вы закодировали бота для Reddit, который будет работать на вас. Надеюсь, вам было весело. Комментарии приветствуются как по техническим аспектам, так и по представлению этой статьи. "Спасибо!"