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

Python praw reddit api: Reliably get posts as they are posted

目前我有一个脚本每 30 秒查询一些 subreddits 和 returns 最新提交:

while True:

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

        if previous != post:
             # Do something

        previous = post

    time.sleep(30)

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

我更愿意做的是 'subscribe' 通过持续打开连接接收 post 的提要 posted。这存在吗?如果没有,是否还有其他我没有想到的解决方案?

(我知道我在说什么会给 reddit api 服务器带来很大的压力,所以它可能不存在,但我认为为了以防万一还是值得一问)

问题的根源在于您将结果限制为只有一个 post。实际上,您想要的是自上次看到以来的每个 post。尝试这样的事情:

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)

另一种在排序方面不那么脆弱的替代方法是存储已处理的 post 的 ID,例如在 SQLite 数据库中,然后为每个 post 查询它重新考虑处理。

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

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

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

其他型号也可以串流,比如Multireddit and Redditor