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。
目前我有一个脚本每 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。