Ключевые слова фильтрации PRAW / Tweepy

Итак, у меня возникли проблемы с фильтрацией результатов моей креветки. Я хочу исключить из результатов такие ключевые слова, как ([запрос], [не по теме] или [nsfw]). Я не хочу, чтобы подобные сообщения, включенные в результаты креветки, публиковались на tweepy. Я ищу документацию, но ничего не могу найти на сайте PRAW.

Вот мой код:

def poster():
conn = sqlite3.connect('jb_id.db')
c = conn.cursor()
toTweet = []
for submission in reddit.subreddit(SUB).hot(limit=POST_LIMIT):
    if not submission.stickied and len(submission.title) < 255:    
        url = submission.shortlink
        title = submission.title
        udate = time.strftime("%Y-%m-%d %X",time.gmtime(submission.created_utc))

        try:
            # This keeps a record of the posts in a the database
            c.execute("INSERT INTO posts (id, title, udate) VALUES (?, ?, ?)",
            (url, title, udate))
            conn.commit()


            message = title + " " + url
            print(message)
            toTweet.append(message)

        except sqlite3.IntegrityError:
            # This means the post was already tweeted and is ignored
            print("Duplicate", url)

c.close()
conn.close()
tweeter(toTweet)

Как видите, я исключил стикеры и заголовки, длина которых превышает 255 символов. Мне было интересно, есть ли способ отфильтровать сообщения на Reddit с ключевыми словами, которые я упомянул выше о результатах praw. Спасибо!


person Cron Dexile    schedule 11.11.2019    source источник


Ответы (1)


Составьте список ключевых слов, которых не должно быть в заголовке заявки.

bad_keywords = "[request]", "[off topic]", "[nsfw]"

Пропустить цикл, если заголовок отправки содержит элемент из списка

title_lowercase = submission.title.lower()
if any(x in title_lowercase for x in bad_keywords):
    continue

Я бы объединил его с другими вашими исключениями, чтобы уменьшить отступы и сделать его более читабельным

bad_title = any(x in title_lowercase for x in bad_keywords)
skip_submission = submission.stickied and len(submission.title) > 255 and bad_title
if skip_submission:
    continue

Полное решение

def poster():
conn = sqlite3.connect('jb_id.db')
c = conn.cursor()
toTweet = []

bad_keywords = "[request]", "[off topic]", "[nsfw]"

for submission in reddit.subreddit(SUB).hot(limit=POST_LIMIT):
    title = submission.title
    title_lowercase = title.lower()

    bad_title = any(x in title_lowercase for x in bad_keywords)
    skip_submission = submission.stickied and len(submission.title) > 255 and bad_title

    if skip_submission:
        continue

    url = submission.shortlink
    udate = time.strftime("%Y-%m-%d %X",time.gmtime(submission.created_utc))

    try:
        # This keeps a record of the posts in a the database
        c.execute("INSERT INTO posts (id, title, udate) VALUES (?, ?, ?)",
        (url, title, udate))
        conn.commit()


        message = title + " " + url
        print(message)
        toTweet.append(message)

    except sqlite3.IntegrityError:
        # This means the post was already tweeted and is ignored
        print("Duplicate", url)

c.close()
conn.close()
tweeter(toTweet)
person Johannes Pertl    schedule 20.11.2019