Получить комментарии пользователей Reddit с помощью PRAW, вызывающего TypeError: объект «SubListing» не является вызываемой ошибкой

Я пытаюсь получить последние 1000 комментариев от пользователя, так как 1000 — это ограничение Reddit.

Я следовал примеру кода здесь и изменил несколько обращений к обновленному API. Например, user.get_comments теперь кажется просто user.comments.

Вот код, который я запустил.

import praw

my_user_agent = 'USERAGENT'
my_client_id = 'CLIENTID'
my_client_secret = 'SECRET'

r = praw.Reddit(user_agent=my_user_agent,
                     client_id=my_client_id,
                     client_secret=my_client_secret)

user = r.redditor('REDDITUSERNAME')

for comment in user.comments(limit=None):
    print comment.body 

Однако я получаю ошибку каждый раз в последней строке.

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'SubListing' object is not callable

Я подключился к API и имею активное соединение, так как могу выполнить печать (user.comment_karma), и оно отображается правильно.

Любые идеи, что я делаю неправильно?


person TheBeginningEnd    schedule 06.12.2016    source источник
comment
Вы не должны использовать формат кода для журнала ошибок, метавопрос об этом.   -  person Stargateur    schedule 06.12.2016
comment
@Stargateur Спасибо за улов. Отредактировал вопрос в соответствии с метапостом.   -  person TheBeginningEnd    schedule 06.12.2016
comment
Вы используете PRAW 3 или 4? Я считаю, что API, возможно, немного изменился с момента этого примера.   -  person Aurora0001    schedule 06.12.2016
comment
Просто удар в темноту, но почему у вас есть только user.comments вместо user.get_comments?   -  person jeff carey    schedule 06.12.2016
comment
@Aurora0001 ПРАВ 4.   -  person TheBeginningEnd    schedule 06.12.2016
comment
@jeffcarey Начиная с PRAW 4.0 (возможно, раньше, я не уверен) get_comments не является допустимым вызовом, поскольку он был заменен просто комментариями. Многие вызовы, которые ранее использовали get_something, теперь используют только .something   -  person TheBeginningEnd    schedule 06.12.2016


Ответы (1)


Согласно документации, comments является атрибутом модели Redditor в PRAW 4, а не функцией. Следовательно, вызов .comments(limit=None) является недопустимым синтаксисом, поскольку .comments не является функцией. Вместо этого вы должны указать порядок сортировки списка, например, потому что SubListing объекты (что такое user.comments) наследуются от BaseListingMixin:

for comment in user.comments.new():
    print(comment.body)

По общему признанию, документация для PRAW 4 очень неясна, и вы, вероятно, найдете лучшую документацию, просматривая код напрямую.

person Aurora0001    schedule 06.12.2016
comment
Странно, свойство определенно существует. user = r.redditor('REDDITUSERNAME') помогает как-то? (вместо get_redditor) - person Aurora0001; 06.12.2016
comment
Извините, забыл изменить это в коде. Теперь это просто r.redditor, а не r.get_redditor, и это то, что я использую. Я просто копирую и вставляю блок кода, прежде чем исправлять эту ошибку. Я отредактировал код в вопросе сейчас. - person TheBeginningEnd; 06.12.2016
comment
Спасибо, что решили эту проблему, хотя она не отображает полную историю комментариев из 1000, она должна быть по умолчанию - это то, что сделала часть (limit = none). Любые идеи, как добавить это, если вы говорите, что это недопустимый синтаксис. - person TheBeginningEnd; 06.12.2016
comment
@TheBeginningEnd, что должно быть действительным для функции .new() (т. е. user.comments.new(limit=None) должно работать), но не для .comments(limit=None), которая недействительна. - person Aurora0001; 06.12.2016
comment
Идеальный. Я отметил ответ как правильный и проголосовал за него, но из-за моей оценки кармы голосование пока не будет отображаться. - person TheBeginningEnd; 06.12.2016
comment
@TheBeginningEnd вы получите эту привилегию на 15 репутации (вы можете получить еще 2 очка репутации, отредактировав чей-то пост, чтобы улучшить его), а затем вам придется повторно проголосовать за все (на самом деле голоса не запоминаются). Рад, что это помогло вам, хотя документы PRAW кажутся очень скудными в данный момент. - person Aurora0001; 06.12.2016
comment
@ Aurora0001 Я добавил несколько примеров в документацию. Надеюсь, вы найдете их полезными: praw.readthedocs.io/en/latest/code_overview/other/ - person bboe; 17.12.2016
comment
@bboe очень полезно, спасибо. Я ценю работу, которую вы делаете с PRAW 4! - person Aurora0001; 17.12.2016