目前我有一个脚本每隔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服务器带来很大压力,所以它可能不存在,但我认为值得问一下以防万一)
答案 0 :(得分:2)
是的,这在PRAW中存在,它被称为stream。您的整个代码块可以替换为以下内容:
for post in reddit.subreddit(query_list).stream.submissions():
# Do something
您可以将submissions
替换为comments
来传输subreddit评论。
其他型号也可以进行流式处理,例如Multireddit和Redditor。
答案 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数据库中,然后查询您正在考虑处理的每个帖子。