Хотите запустить бот PRAW, который только один раз печатает заявление - PullRequest
0 голосов
/ 25 мая 2019

Я пишу praw-бот, который проходит через определенный subreddit, и беру заголовки каждого поста в пределах определенного лимита, 20 постов. Затем он пытается определить, существует ли конкретная строка ("word_to_find") в заголовке каждого сообщения.

Я хочу, чтобы бот распечатал строку "Не могу найти статьи Kawhi в subreddit!" если он не находит указанное "word_to_find" ни в одном из заголовков сообщения.

Тем не менее, я хочу, чтобы бот печатал вышеуказанную строку только один раз, и только если «word_to_find» не существует ни одного из найденных заголовков.

Однако, когда оператор else выполняется в цикле my, он печатает сообщение с найденной строкой "word_to_find" и оставшимся количеством сообщений с указанной строкой, все в пределах ограничения 20.

Надеюсь, все это имеет смысл. Ниже мой текущий код.

    def run_bot():
        sub = r.subreddit('nba')
        print("---Grabbing subreddit---\n")
        subs = sub.top('week', limit=20)
        print("---Grabbing posts in sub---\n")
        print("Looking for Kawhi Articles..\n")
        for posts in subs:
            article_url = posts.url
            post_title = posts.title
            word_to_find = "Kawhi"

            if word_to_find in post_title:
                print(post_title)



            else: 
                print("Can't find Kawhi articles in the 
                         subreddit!")

   run_bot()

1 Ответ

0 голосов
/ 25 мая 2019

В следующем коде предполагается, что вы хотите перебрать все сообщения независимо от того, найдете ли вы сообщение с word_to_find в post_title.

def run_bot():
    sub = r.subreddit('nba')
    print("---Grabbing subreddit---\n")
    subs = sub.top('week', limit=20)
    print("---Grabbing posts in sub---\n")
    print("Looking for Kawhi Articles..\n")

    not_in_any_post = True
    for posts in subs:
        article_url = posts.url
        post_title = posts.title
        word_to_find = "Kawhi"

        if word_to_find in post_title:
            print(post_title)
            not_in_any_post = False
        else:
            not_in_any_post = not_in_any_post and True

    if not_in_any_post:
        print("Can't find Kawhi articles in the subreddit!")

run_bot()

Флаг not_in_any_post будет True, только если ни один из постов не имеет word_to_find.

Если вы хотите напечатать сообщение один раз, как только будет найден заголовок, который не имеет word_to_find, вы можете использовать существующий код при добавлении оператора break в блок else. Однако это означает, что он не будет перебирать оставшиеся сообщения.

...