PRAW 6:获取所有提交的subreddit

时间:2018-12-31 14:37:26

标签: python reddit praw

我正在尝试使用PRAW从最新到最旧的迭代某个subreddit的提交。我以前是这样的:

subreddit = reddit.subreddit('LandscapePhotography')
for submission in subreddit.submissions(None, time.time()):
    print("Submission Title: {}".format(submission.title))

但是,当我现在尝试执行此操作时,出现以下错误:

AttributeError: 'Subreddit' object has no attribute 'submissions'

通过查看文档,我似乎无法弄清楚该如何做。我能做的最好的是:

for submission in subreddit.new(limit=None):
    print("Submission Title: {}".format(submission.title))

但是,这仅限于前1000个提交。

是否有一种方法可以处理所有提交的内容,而不仅仅是前1000个?

3 个答案:

答案 0 :(得分:2)

很遗憾,Reddit从他们的API中删除了此功能。

签出PRAW changelog。 6.0.0版中的更改之一是:

  

已删除

     

链接的帖子说Reddit正在为所有用户禁用Cloudsearch:

  

从2018年3月15日开始,我们将开始逐步将API用户转移到新的搜索系统中。到3月底,我们希望将所有人撤离,并最终关闭旧系统。

PRAW的Subreddit.sumbissions()使用Cloudsearch来搜索给定时间戳之间的帖子。由于Cloudsearch已删除,并且替换它的搜索不支持时间戳搜索,因此不再可以使用PRAW或任何其他Reddit API客户端基于时间戳执行搜索。这包括尝试从subreddit获取所有帖子。

有关更多信息,请参见this thread from /r/redditdev posted by the maintainer of PRAW


替代项

由于Reddit将所有列表限制为〜1000个条目,因此目前无法使用其API在subreddit中获取所有帖子。但是,存在带有API的第三方数据集,例如pushshift.io。为/ u / kungming2 said on Reddit

  

您可以使用Pushshift.io从定义的时间仍然返回数据   使用其API的时间段:

https://api.pushshift.io/reddit/submission/search/?after=1334426439&before=1339696839&sort_type=score&sort=desc&subreddit=translator
     

例如,这允许您解析对r / translator的提交   在2012-04-14和2012-06-2014之间。

答案 1 :(得分:0)

您可以使用迭代循环从pushshift.io检索所有数据。只需将开始日期设置为当前纪元日期,然后获取1000个项目,然后将列表中最后一个项目的created_utc作为before参数即可获取接下来的1000个项目,并一直进行到停止返回为止。

以下是获取更多信息的有用链接: https://www.reddit.com/r/pushshift/comments/b7onr6/max_number_of_results_returned_per_query/ enter link description here

答案 2 :(得分:0)

Pushshift不适用于私人subreddit。在这种情况下,您可以从现在开始一次创建1000个提交的数据库(不追溯)。

如果您只需要尽可能多的提交,则可以尝试使用top,hot,new和合并它们的不同排序方法。