如何从subreddit获取随机帖子(praw)

时间:2017-10-22 08:57:38

标签: python python-3.x reddit praw

我有一个问题:

获取subreddit随机帖子的简单方法是什么?或者最好是我可以在24小时内随机发帖。

在较旧版本的praw中,您可以使用

sub = r.get_subreddit('earthporn')
posts = sub.get_random_submission() 
print(posts.url)

但是“get_random_submission”不再存在。我知道我可以使用像

这样的东西
sub = r.subreddit('all')
    for posts in sub.hot(limit=20):
        random_post_number = random.randint(0,20)
        for i,posts in enumerate(sub.hot(limit=20)):
            if i==random_post_number:
                print(posts.score)

但这是非常错误的,而且不是节能的。另外我正在使用这个用于Twitter机器人,并且在使用此代码5分钟后我收到错误。

所以我真的想知道是否有一个简单的方法可以获得随机提交的帖子,以及我是否可以在特定时间段(例如过去24小时)内获得随机提交的内容?

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以更多地简化代码并避免双循环。

sub = r.subreddit('all')
posts = [post for post in sub.hot(limit=20)]
random_post_number = random.randint(0, 20)
random_post = posts[random_post_number]

答案 1 :(得分:0)

您可以通过生成一个数字然后从列表中获取该帖子来获取随机帖子。在选择过去24小时内的帖子时,您需要先填充这些帖子的数组。我将当前时间与提交帖子的时间进行比较,如果小于24小时,我会将其添加到列表posts

然后,您可以从列表中随机提交,以执行您选择的任何操作。我已将此提交内容命名为random_post

import praw
import time
import random


LIMIT_POST = 5

subreddit = reddit.subreddit('all')
new_submissions = subreddit.new(limit = LIMIT_POST)

current_time = int(time.time())

posts = []

for submission in new_submissions:
        sub_age = ((current_time - submission.created_utc) /60 /60 /24)
        if sub_age < 1:
                posts.append(submission)


random_number = random.randint(0,LIMIT_POST -1)
random_post = posts[random_number]