Как ограничить комментарии первого уровня в Praw Reddit? - PullRequest
0 голосов
/ 10 марта 2020

Можно ли ограничить комментарии первого уровня, которые возвращает функция replace_more?

submission.comments.replace_more(limit=1)

Или удалить все MoreComments объекты с первого уровня? Я имею в виду, что я хотел бы ограничить дерево комментариев height и получить максимум width (получить все комментарии, которые go из ограниченного количества комментариев первого уровня).

1 Ответ

1 голос
/ 11 марта 2020

Вместо того, чтобы использовать replace_more, просто замените каждый MoreComments объект по мере его поступления. Это предотвратит замену любых MoreComments объектов, которые не находятся на верхнем уровне.

Ниже приведена функция, которая будет перебирать комментарии верхнего уровня, заменяя каждый MoreComments при его обнаружении. Это основано на примере кода из документации PRAW :

from praw.models import MoreComments

def iter_top_level(comments):
    for top_level_comment in comments:
        if isinstance(top_level_comment, MoreComments):
            yield from iter_top_level(top_level_comment.comments())
        else:
            yield top_level_comment

Этот генератор работает так, что он выдает комментарии верхнего уровня из представления, но когда он встречает MoreComments объект, он загружает эти комментарии и рекурсивно вызывает себя. Рекурсивный вызов необходим, поскольку в больших потоках каждый объект MoreComments содержит в конце еще один объект MoreComments верхнего уровня.

Вот пример того, как его можно использовать:

submission = reddit.submission('fgi5bd')
for comment in iter_top_level(submission.comments): 
    print(comment.author) 
...