【问题标题】:Can you stream posts that have made it to "hot"?您可以流式传输使其“热门”的帖子吗?
【发布时间】:2020-05-01 05:51:38
【问题描述】:

假设我想从 subreddit“新闻”流式传输帖子。但是,帖子非常频繁,我们不能说每个帖子都值得。所以我想通过尝试流式传输“热门”列表来过滤好帖子。但我不确定这是否可能,或者类似的事情是否可能。
通常,这就是我发布帖子的方式:
for submission in subreddit.stream.submissions(): if not submission.stickied: print(str(submission.title) + " " + str(submission.url) + "\n")

这会过滤帖子,但不会流式传输:

for submission in subreddit.hot(limit=10): print(str(submission.title) + " " + str(submission.url) + "\n")

那么,关于如何同时流式传输和过滤帖子有什么想法吗?
谢谢

【问题讨论】:

    标签: python stream praw


    【解决方案1】:

    流式传输热门帖子是一个不协调的想法。

    PRAW 中的流的意义在于在提交到 Reddit 后立即(几乎)获取每个帖子或评论。另一方面,热门列表包含被认为是当前有趣的项目,按分数排序,分数与分数除以年龄成正比。

    但是帖子很频繁,我们不能说每一个帖子都值得。

    由于 Reddit 用户查看帖子并对其进行投票需要时间,因此在帖子发布后立即评估帖子是否值得(以分数衡量)并没有多大意义。


    如果您的目标是对进入子版块顶部 n 的每个帖子执行一些操作,您可以每隔一段时间检查首页,对您的任何帖子执行操作还没见过。举个例子:

    import praw
    import time
    
    
    reddit = praw.Reddit()  # must be edited to properly authenticate
    subreddit = reddit.subreddit('news')
    seen_submissions = set()
    
    while True:
        for submission in subreddit.hot(limit=10):
            if submission.fullname not in seen_submissions:
                seen_submissions.add(submission.fullname)
                print('{} {}\n'.format(submission.title, submission.url))
        time.sleep(60)  # sleep for a minute (60 seconds)
    

    【讨论】:

      【解决方案2】:

      要添加到 jarhill0 的答案,您还可以通过在参数中指定“之后”来对页面进行分页。

      import praw
      import time
      
      
      reddit = praw.Reddit()  # must be edited to properly authenticate
      subreddit = reddit.subreddit('news')
      seen_submissions = set()
      
      while True:
          params = None
          for _ in range(10):# get first 10 pages of 'hot'.
              for submission in subreddit.hot(limit=10, params=params):
                  if submission.fullname not in seen_submissions:
                      seen_submissions.add(submission.fullname)
                      print('{} {}\n'.format(submission.title, submission.url))
                  params = {"after": submission.fullname}
          time.sleep(60)  # sleep for a minute (60 seconds)
      

      【讨论】:

      • 嗨@mBrice1024,这不是用PRAW进行分页的正确方法。 PRAW 将“在后台”为您分页任何列表。要获得更多帖子,只需更改limit 参数。如果您设置limit=None,PRAW 将从列表中提取与 Reddit 的 API 提供的一样多的帖子(大约 1000 个)。
      猜你喜欢
      • 1970-01-01
      • 2015-05-05
      • 1970-01-01
      • 2021-11-18
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多