Python Praw在subreddits中跳过粘性

时间:2017-01-25 20:32:03

标签: python reddit praw

我试图遍历subreddits,但想忽略顶部的粘贴帖子。我能够打印前5个帖子,不幸的是包括胶粘物。尝试跳过这些的各种pythonic方法都失败了。我的代码的两个不同的例子如下。

            subreddit = reddit.subreddit(sub)
            for submission in subreddit.hot(limit=5):

                # If we haven't replied to this post before
                if submission.id not in posts_replied_to:
                    ##FOOD

                    if subreddit == 'food':

                        if 'pLEASE SEE' in submission.title:
                            pass
                        if "please vote" in submission.title:
                            pass
                        else:
                            print(submission.title)
                        if re.search("please vote", submission.title, re.IGNORECASE):
                            pass
                        else:

                            print(submission.title)

我注意到文档中有一个粘性标记但不确定如何使用它。任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:2)

It looks like you can get the id of a stickied post based on docs。所以也许你可以得到贴合帖子的id(注意,使用粘性方法的'数字'参数,你可以说给我第一个,第二个或第三个,粘贴发布;利用这个来获得所有的粘贴帖子)以及每次提交你要提取的内容,首先根据粘贴的ID检查其ID。

示例:

# assuming there are no more than three stickies...
stickies = [reddit.subreddit("chicago").sticky(i).id for i in range(1,4)]

然后当你想确定给定的帖子没有粘贴时,请使用:

if post.id not in stickies:
    do something

看起来,如果少于三个,这会给你一个包含重复ID的列表,这不会成为问题。

答案 1 :(得分:2)

粘贴的提交具有sticked属性,其评估结果为True。将以下内容添加到循环中,您应该很高兴。

if submission.stickied:
    continue

通常,我建议检查您正在使用的对象的可用属性,以查看是否有可用的东西。请参阅:Determine Available Attributes of an Object

答案 2 :(得分:1)

作为@Al Avery的答案的附录,您可以通过执行类似

之类的操作来完整搜索给定subreddit上所有胶粘物的ID
def get_all_stickies(sub):
    stickies = set()
    for i in itertools.count(1):
        try:
            sid = sub.sticky(i)
        except pawcore.NotFound:
            break
        if sid in stickies:
            break
        stickies.add(sid)
    return stickies

此函数考虑到如果向stick提供了无效索引,则文档会导致错误,而实际行为似乎是返回重复ID。如果你有大量的胶粘物,使用set而不是列表可以更快地查找。您可以将此功能用作

subreddit = reddit.subreddit(sub)
stickies = get_all_stickies(subreddit)
for submission in subreddit.hot(limit=5):
    if submission.id not in posts_replied_to and submission.id not in stickies:
        print(submission.title)