Python praw reddit api:可靠地获取发布的帖子

时间:2018-04-10 01:12:43

标签: python reddit praw

目前我有一个脚本每隔30秒查询一些subreddits并返回最新的提交内容:

while True:

    for post in reddit.subreddit(query_list).new(limit=1):

        if previous != post:
             # Do something

        previous = post

    time.sleep(30)

问题在于,如果在该时间范围内有两个以上的帖子,它将跳过其中一个帖子。我知道我可以设置一个较小的等待时间,或者我可以一次获得多个帖子并对结果进行排序,但这并没有真正解决问题,只是降低了它的可能性。

我更愿意做的是,通过持续开放的连接来“订阅”Feed,这些连接在发布时接收帖子。这存在吗?如果没有,是否有另一种我没有想到的解决方案?

(我意识到我所说的会给reddit api服务器带来很大压力,所以它可能不存在,但我认为值得问一下以防万一)

2 个答案:

答案 0 :(得分:2)

是的,这在PRAW中存在,它被称为stream。您的整个代码块可以替换为以下内容:

for post in reddit.subreddit(query_list).stream.submissions():
    # Do something

您可以将submissions替换为comments来传输subreddit评论。

其他型号也可以进行流式处理,例如MultiredditRedditor

答案 1 :(得分:0)

问题的根源在于您将结果限制为仅限一个帖子。实际上,你想要的就是你看到的最后一个帖子。尝试这样的事情:

while True:
    for post in reddit.subreddit(query_list).new():
        if not newLastProcessed:
            newLastProcessed = post
        if post == lastProcessed:
            break
        # Do something

    lastProcessed = newLastProcessed
    newLastProcessed = None
    time.sleep(30)

另一个在排序方面不太脆弱的替代方法是存储已处理帖子的ID,例如在SQLite数据库中,然后查询您正在考虑处理的每个帖子。