2015-09-05 5 views
1

Мне нужно захватить верхние комментарии в subreddit, со всех времен.Как я могу составить список лучших комментариев в subreddit с PRAW?

Я попытался схватить все представления, и перебирая их, но, к сожалению, количество сообщений вы можете получить ограничен 1000.

Я попытался с помощью Subreddit.get_comments, но он возвращает только 25 комментариев.

Так что я ищу способ обойти это.

Можете ли вы мне помочь?

ответ

4

Возможно использовать get_comments с параметром limit, установленным на None, чтобы получить все возможные комментарии. (По умолчанию используется сумма для учетной записи, которая обычно равна 25). (Параметры, которые используются для get_comments, включают значения для get_content, включая limit).

Однако это, вероятно, не будет делать то, что вы хотите – get_comments (или более конкретно /r/subreddit/comments) предлагает только список новых комментариев или новых позолоченных комментариев, а не верхние комментарии. И так как get_comments также ограничен 1000 комментариями, вам будет сложно создать полный список лучших комментариев.

Так что вы действительно хотите, это оригинальный алгоритм –, получающий список лучших материалов, а затем верхние комментарии тех. Это не идеальная система (на слабом счету может быть действительно проголосовавший комментарий), но это лучше всего.

Вот код:

import praw 

r = praw.Reddit(user_agent='top_comment_test') 
subreddit = r.get_subreddit('opensource') 
top = subreddit.get_top(params={'t': 'all'}, limit=25) # For a more potentially accurate set of top comments, increase the limit (but it'll take longer) 
all_comments = [] 
for submission in top: 
    submission_comments = praw.helpers.flatten_tree(submission.comments) 
    #don't include non comment objects such as "morecomments" 
    real_comments = [comment for comment in submission_comments if isinstance(comment, praw.objects.Comment)] 
    all_comments += real_comments 

all_comments.sort(key=lambda comment: comment.score, reverse=True) 

top_comments = all_comments[:25] #top 25 comments 

print top_comments 
+1

Спасибо так много! –

+0

спасибо тоже! – swyx