Как проверить, содержит ли пост Reddit только изображение и ничего больше? - PullRequest
0 голосов
/ 04 февраля 2019

Справочная информация: в настоящее время я создаю бота Reddit с использованием библиотеки praw с Python 3.7.Одна из вещей, которую должен сделать мой бот, - это проверить последние сообщения в каком-либо подредите, чтобы увидеть, содержат ли они только изображение и ничего больше .

Учитывая, что наReddit (сообщения, которые являются просто загруженным изображением и обычными текстовыми сообщениями с изображением в них), я сначала решил провести различие между этими двумя возможностями.Насколько мне известно, praw не предоставляет никакой функциональности для получения типа сообщения Reddit.

Для обработки сообщений, которые являются просто изображениями и ничем иным, я просто проверяю URL возвращенной praw представление с определенным регулярным выражением :

^http(s)?://i\.redd\.it/\w+\.(png|gif|jpg|jpeg)$

Если URL-адрес совпадает, я просто загружаю изображение.Это работает.С другой стороны, для текстовых сообщений, которые содержат только изображение, я проверяю свойство selftext, что-то вроде этого для сообщений, которые содержат только изображение и ничего больше:

​\n\nhttps://i.redd.it/xxxxxxxxxx.png

ИспользованиеПриведенное выше регулярное выражение (с удаленными маркерами начала и конца), я могу извлечь URL и убедиться, что через re.findall есть только один.Тем не менее, как я могу убедиться, что в посте абсолютно нет нет текста (кроме пробелов и этой странной escape-последовательности ​, что я не понимаю ее цели)?

1 Ответ

0 голосов
/ 06 февраля 2019

Насколько я знаю, praw не предоставляет никаких функций для получения типа сообщения Reddit.

PRAW загружает атрибуты динамически из ответа Reddit.Что доступно для любого данного объекта, см. В разделе документации PRAW Определение доступных атрибутов объекта .Для Submission он рекомендует следующий фрагмент:

import pprint

# assume you have a Reddit instance bound to variable `reddit`
submission = reddit.submission(id='39zje0')
print(submission.title) # to make it non-lazy
pprint.pprint(vars(submission))

Это выведет dict доступных атрибутов.Используя это, вы обнаружите атрибуты .is_self и .is_reddit_media_domain.Первый скажет вам (в качестве логического значения), является ли сообщение самостоятельной публикацией, а второй скажет вам (также в виде логического значения), является ли публикация "reddit media", которая также включает видео.Вместо того, чтобы сопоставлять URL с регулярным выражением, просто проверьте, что .is_reddit_media_domain истинно и .domain == 'i.redd.it'.

Например:

In [5]: reddit.submission('anr0l2').is_self
Out[5]: True

In [6]: reddit.submission('anspgf').domain == 'i.redd.it'
Out[6]: True

In [7]: reddit.submission('antg2x').domain == 'i.redd.it'
Out[7]: False

как я могу сделатьУверен, что на изображении нет абсолютно никакого текста

Что вы подразумеваете под "без текста на изображении"?Что для вас значит изображение, содержащее текст?

...